在http服务器示例的request_handler中删除了复制和赋值构造函数

时间:2016-11-09 06:46:43

标签: c++11 boost boost-asio

为什么在request_handler in the ASIO http server example中删除了复制和赋值构造函数?这是保存查找的标题:

class request_handler
{
public:
  request_handler(const request_handler&) = delete;
  request_handler& operator=(const request_handler&) = delete;

  /// Construct with a directory containing files to be served.
  explicit request_handler(const std::string& doc_root);

  /// Handle a request and produce a reply.
  void handle_request(const request& req, reply& rep);

private:
  /// The directory containing the files to be served.
  std::string doc_root_;

  /// Perform URL-decoding on a string. Returns false if the encoding was
  /// invalid.
  static bool url_decode(const std::string& in, std::string& out);
};

如果有的话,似乎唯一的字段doc_root_可以成为const,默认构造函数会在需要时执行吗?代码实际上并不复制已发布示例中的处理程序。但是,我正在探索我的代码中的可能性,如果我遗漏了一些非常基本的东西,那就太棒了。

1 个答案:

答案 0 :(得分:1)

这是有道理的,因为复制doc_root_可能会导致额外的内存分配。这意味着对于每个新的connection,它会将request_handler复制到连接,从而进行内存分配(如果SSO不适用于string大小的课程)。

如果我可以避免不必要的分配,我肯定会这样做,如果request_handler没有存储任何每connection个特定数据,那么更多。

注意:如果它没有完全回答这个问题,我准备将其作为评论。