当前位置:  开发笔记 > 编程语言 > 正文

为什么在lambdas中捕获这个以及共享指针?

如何解决《为什么在lambdas中捕获这个以及共享指针?》经验,为你挑选了1个好方法。

在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)或有其他原因吗?



1> Violet Giraf..:

如果没有this捕获,则无法从lambda内部调用类的方法(例如do_write)。或访问成员变量。当然,您可以编写self->do_write(),但是它不那么优雅,而且可能更慢(由于shared_ptr涉及)。

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有