在ASIO HTTP Server 3 示例中有如下代码:
void server::start_accept()
{
new_connection_.reset(new connection(io_service_, request_handler_));
acceptor_.async_accept(new_connection_->socket(),
boost::bind(&server::handle_accept, this,
boost::asio::placeholders::error));
}
void server::handle_accept(const boost::system::error_code& e)
{
if (!e)
{
new_connection_->start();
}
start_accept();
}
本质上,new_connection_
是server
类的成员,用于将连接从 传递start_accept
到handle_accept
。现在,我很好奇为什么new_connection_
将其实现为成员变量。
bind
使用而不是成员变量来传递连接不是也可以吗?像这样:
void server::start_accept()
{
std::shared_ptr<connection> new_connection(new connection(io_service_, request_handler_));
acceptor_.async_accept(new_connection_->socket(),
boost::bind(&server::handle_accept, this,
boost::asio::placeholders::error),
new_connection);
}
void server::handle_accept(boost::system::error_code const& error, std::shared_ptr<connection> new_connection)
{
if (!error) {
new_connection->start();
}
start_accept();
}
如果是这样,为什么该示例使用成员变量?是为了避免涉及的复制吗?
(注意:我对 ASIO 还不满意,所以这里可能存在一个基本的误解)