dsh*_*erd 15 c++ lambda boost boost-asio c++11
在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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么self需要指针来保持类活着(请参阅此问题),但我不明白为什么this指针也被捕获.只是这样作者可以写do_write(length)而不是self->do_write(length)或有其他原因吗?
如果没有this捕获,则无法从lambda内部调用类的方法(例如do_write)。或访问成员变量。当然,您可以编写self->do_write(),但是它不那么优雅,而且可能更慢(由于shared_ptr涉及)。