在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
涉及到)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句