В примере асинхронного tcp-сервера на бусте связывается функция (все это происходит в классе, наследующим enable_shared_from_this):
boost::asio::async_write(socket_, boost::asio::buffer(message_),
boost::bind(&tcp_connection::handle_write, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
...
void handle_write(const boost::system::error_code& /*error*/,
size_t /*bytes_transferred*/) { }
Почему при вызове boost::bind(...) в ее аргументы передается shared_from_this()? Какой в этом смысл, если все аргументы boost::bind(...) (кроме первого) должны использоваться как аргументы handle_write(...), но в аргументах handle_write(...) нет никаких указателей на классы?
handle_write является функцией-членом, т.е. первым (неявным) параметром принимает указатель this. Этот this, правда уже в форме shared_ptr, а не обычного сырого указателя, связывается с помощью bind с handle_write.
Таким образом, можно сказать, что в async_write выполняется вызов вида:
shared_from_this()->handle_write( /*остальные параметры*/);
Наличие shared_ptr судя по всему требуется из-за асинхронного вызова, т.е. когда функция фактически может "пережить" объект, который она принимает параметром через указатель.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости