1

在这个提升异步 udp 服务器示例中: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));

来自http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/basic_datagram_socket/async_send_to/overload1.html

第一个参数的签名是通过引用传递的

const ConstBufferSequence & buffers 

那么为什么要使用共享指针来发送消息?

4

1 回答 1

3

这是因为字符串不仅作为第一个参数传递给async_send_to(),而且还用于作为第三个参数bind()传递给的表达式。async_send_to()

函数handle_send()期望 ashared_ptr到 a string。由于调用是异步的,因此string具有自动存储持续时间的对象可能已超出范围并handle_send()在执行时被销毁。因此,使用shared_ptr.

于 2013-06-03T10:07:08.450 回答