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 は永久に存在しますか?