Ответ из списков рассылки boost-пользователей:
Если бы это было так, это было бы совершенно бесполезно, так как у вас нет доступа к
любой из буферов в вашем обработчике завершения.
Способ использования buffer () - передать ссылки на хранилище, которое вы
гарантировать срок службы каким-либо другим способом.
Вы можете сохранить его во внешнем объекте или сохранить в
`this ', как вы сделали, или связав его в функцию обработчика завершения
сам объект.
void onComplete(shared_ptr<std::string> s, error_code const&, size_t)
{
// do stuff
}
void send(std::string const& messageData)
{
shared_ptr<std::string> s = make_shared<std::string>(messageData);
async_send(socket, boost::asio::buffer(*s),
boost::bind(&T::onSend, this, s, _1, _2));
}
Это гарантирует, что время жизни данных буфера будет по крайней мере таким же
обработчик завершения существует.