在方法do_read
和do_write
中boost asio HTTP server example的连接对象中,捕获shared_from_this()
来解决连接对象的生命周期问题as been answered previously。仍然不清楚为什么在第67和88行中,该代码再次调用shared_from_this()
而不是使用self
:
40 auto self(shared_from_this());
41 socket_.async_read_some(boost::asio::buffer(buffer_),
42 [this, self](boost::system::error_code ec, std::size_t bytes_transferred)
43 {
....
67 connection_manager_.stop(shared_from_this());
```
最佳答案
没有实际的原因(我想这只是从旧的C++ 03示例重构为C++ 11样式后得到的结果)。最好使用self
,因为无论如何它已经被捕获了。
我能想到的唯一“受教育”的原因可能是为了证明已明确捕获的self
存储在lambda中,即使未使用它也是如此。
关于boost - 为什么boost示例再次调用 `shared_from_this()`而不是使用闭包变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29613178/