在方法do_readdo_writeboost 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/

10-11 23:17
查看更多