看一下Asio库的例子,例如这个例子(例如,第37行),我看到有时候他们会创建一个共享指针(他们自己命名),并在lambda中捕获它们,在那里他们称之为asio功能,但我不明白它的目的是什么.我甚至没看到它用过.
那么,为什么他们这样做呢?
相关守则:
..在服务器类中......(创建会话的地方)
if (!ec)
{
std::make_shared<session>(std::move(socket_))->start();
}
Run Code Online (Sandbox Code Playgroud)
... session::start()会员方法:
void start()
{
do_read();
}
Run Code Online (Sandbox Code Playgroud)
... session::do_read()成员方法(我感兴趣的地方):
void do_read()
{
auto self(shared_from_this()); // <<< ---WHY 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)