В этом примере: boost async udp server:
http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/tutorial/tutdaytime6/src.html
boost::shared_ptr<std::string> message(
new std::string(make_daytime_string()));
socket_.async_send_to(boost::asio::buffer(*message), remote_endpoint_,
boost::bind(&udp_server::handle_send, this, message,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
подпись 1-го аргумента передается по ссылке
const ConstBufferSequence & buffers
тогда почему для отправки сообщения используется общий указатель?
Это потому, что строка не просто передается в качестве первого аргумента async_send_to()
, но он также используется в bind()
выражение, которое передается async_send_to()
как в третьих аргумент.
функция handle_send()
ожидает shared_ptr
к string
, Поскольку вызов асинхронный, string
объект с автоматическим сроком хранения может выпасть из области видимости и быть уничтоженным к тому времени handle_send()
исполняется. Следовательно, использование shared_ptr
,
Других решений пока нет …