在方法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());
```
答案 0 :(得分:5)
没有实际的理由(我猜这只是旧C ++ 03示例的一个剩余部分,它被重构为C ++ 11风格)。使用self
会更好,因为它已经被捕获了。
我能想到的唯一“教育”原因可能是证明明确捕获的self
存储在lambda中,即使它未被使用。