在异步的tcp服务端的示例中,读和写的成员函数实现里面,都有auto self(shared_from_this());这段代码,并且在lambda的捕获列表[]中有捕获变量self,但是在lambda的闭包{}中,并没有用到这个变量self,这样的作用是什么呢?
例程部分源码:
private:
void do_read()
{
auto self(shared_from_this());
socket_.async_read_some(asio::buffer(data_, max_length),
[this, self](std::error_code ec, std::size_t length)
{
if (!ec)
{
do_write(length);
}
});
}
作用:
确保连接对象(例程中的class Session)的生命周期比异步操作要长,例如:只要lambda函数是存活的(如async_xxx之类的异步操作在进行),这个连接对象(class session)就肯定也是存活状态的;