来自http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/chat/chat_server.cpp
typedef boost::shared_ptr<chat_session> chat_session_ptr;
void start_accept()
{
chat_session_ptr new_session(new chat_session(io_service_, room_));
acceptor_.async_accept(new_session->socket(),
boost::bind(&chat_server::handle_accept, this, new_session,
boost::asio::placeholders::error));
}
void handle_accept(chat_session_ptr session,
const boost::system::error_code& error)
{
if (!error)
{
session->start();
}
start_accept();
为什么new_session
共享的ptr没有被破坏?如果我正确理解acceptor_.async_accept
返回作为它的异步调用?start_accept
所以当函数返回时共享ptr不会被删除。
并且由于 new_session 类有一个套接字成员,因此套接字的生命周期与这个 new_session 绑定在一起,所以读写 tcp 消息的能力也可以吗?不是吗?
----编辑---基于比利奥尼尔的回答:我还有一个问题
所以 new_session 将永远存在,除非发生错误或我强行关闭服务器?