【发布时间】:2018-07-31 16:13:37
【问题描述】:
下面是一些代码from a boost::asio example。为什么在构造 chat_session 时移动 socket_ 成员是可以的,如果处理程序底部的递归调用将在下次接受发生时将相同的 tcp::socket 传递出去?我认为在移动操作之后,对象不再可以安全使用。
class chat_server
{
public:
chat_server(boost::asio::io_service& io_service,
const tcp::endpoint& endpoint)
: acceptor_(io_service, endpoint),
socket_(io_service)
{
do_accept();
}
private:
void do_accept()
{
acceptor_.async_accept(socket_,
[this](boost::system::error_code ec)
{
if (!ec)
{
std::make_shared<chat_session>(std::move(socket_), room_)->start();
}
do_accept();
});
}
tcp::acceptor acceptor_;
tcp::socket socket_;
chat_room room_;
};
【问题讨论】:
标签: c++ c++11 boost boost-asio move-semantics