Почему конструкторы копирования и присваивания удалены в request_handler in the ASIO http server example? Вот заголовок, чтобы сохранить поиск:Удаленные копии и конструкторы присваивания в request_handler примера http-сервера
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_
можно константные и конструкторы по умолчанию будет делать, если это необходимо? Код фактически не копирует обработчик в опубликованном примере. Тем не менее, я изучаю возможность в своем коде, и было бы прекрасно понять, не хватает ли я чего-то очень элементарного.
Пропустить ли я, когда можно было бы скопировать 'request_handler'? Конструктор 'connection' принимает его по ссылке: https://github.com/boostorg/asio/blob/boost-1.62.0/example/cpp11/http/server/connection.cpp#L21. Если он будет скопирован в любом месте, текущий код с явно удаленным конструктором копии не будет работать. Я могу понять, является ли удаление защитой от случайного будущего кода копирования, но это все, о чем я могу думать. Что-нибудь еще? –
Да, в коде 'request_handler', когда-то построенном, всегда хранится как ссылка. Если это вообще было случайно скопировано, компилятор будет плакать и терпеть неудачу, потому что функции копирования и назначения помечены как удаленные. Да, удаление является защитным механизмом, чтобы сообщить читателю (и компилятору), что объект не может быть скопирован, и то, на что я ответил, является одной из причин его совершения. Есть и другие причины для этого, но это лучше всего подходит для данного кода. – Arunmu