为什么在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,默认构造函数会在需要时执行吗?代码实际上并不复制已发布示例中的处理程序。但是,我正在探索我的代码中的可能性,如果我遗漏了一些非常基本的东西,那就太棒了。
答案 0 :(得分:1)
这是有道理的,因为复制doc_root_
可能会导致额外的内存分配。这意味着对于每个新的connection
,它会将request_handler
复制到连接,从而进行内存分配(如果SSO不适用于string
大小的课程)。
如果我可以避免不必要的分配,我肯定会这样做,如果request_handler
没有存储任何每connection
个特定数据,那么更多。
注意:如果它没有完全回答这个问题,我准备将其作为评论。