【发布时间】:2016-05-04 19:40:27
【问题描述】:
查看 Asio 库 this one for example 的示例(例如,第 37 行),我看到有时他们会从中创建一个共享指针(他们将其命名为 self),并将其捕获到他们调用的 lambda 中一些asio函数,但我不明白它的目的是什么。我什至没有看到它使用过。
那么,他们为什么要这样做呢?
相关代码:
..在服务器类中...(创建会话的地方)
if (!ec)
{
std::make_shared<session>(std::move(socket_))->start();
}
...session::start()成员方法:
void start()
{
do_read();
}
...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);
}
});
}
【问题讨论】:
标签: c++ boost boost-asio shared-ptr