在Boost.asio C++ 11示例中,有如下所示的片段:
void do_read() { auto self(shared_from_this()); socket_.async_read_some(boost::asio::buffer(data_, max_length), [this, self](boost::system::error_code ec, std::size_t length) { if (!ec) { do_write(length); } }); }
我理解为什么self
需要指针来保持类活着(请参阅此问题),但我不明白为什么this
指针也被捕获.只是这样作者可以写do_write(length)
而不是self->do_write(length)
或有其他原因吗?
如果没有this
捕获,则无法从lambda内部调用类的方法(例如do_write
)。或访问成员变量。当然,您可以编写self->do_write()
,但是它不那么优雅,而且可能更慢(由于shared_ptr
涉及)。