【发布时间】:2013-05-27 07:02:16
【问题描述】:
来自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 共享的指针没有被销毁?如果我理解正确,acceptor_.async_accept 会立即作为异步调用返回?所以start_accept函数返回时共享的ptr不会被删除。
并且由于 new_session 类有一个套接字成员,所以套接字的生命周期与这个 new_session 绑定在一起,所以读写 tcp 消息的能力也可以吗?不是吗?
----编辑--- 基于比利奥尼尔的回答:我还有一个问题
所以除非发生错误或我强行关闭服务器,否则 new_session 将永远存在?
【问题讨论】:
标签: c++ boost boost-asio shared-ptr