为什么要在lambda中捕获该对象以及该对象的共享指针?

牧羊人

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

来自分类Dev

为什么该对象返回相同的设置?

来自分类Dev

为什么nhibernate抱怨删除该对象?

来自分类Dev

为什么该对象销毁无效?

来自分类Dev

提取请求,该请求返回coredata URL。为什么?以及如何访问托管对象?

来自分类Dev

在新指针的构造函数中传递的Lambda函数需要访问该对象

来自分类Java

在documentSnapShot中获取值,但是将其转换为对象时,该对象返回null,为什么?

来自分类Dev

如果我在lambda中删除保存该lambda的对象,究竟会发生什么?

来自分类Dev

我可以在该对象的构造函数中创建一个指向该对象的指针吗?

来自分类Dev

如何在函数中为新对象分配一个指针,而退出该对象后该对象不消失

来自分类Dev

为什么数组的对象属性正确访问该值?

来自分类Dev

为什么列出两次时该对象消失了?

来自分类Dev

该对象初始化器模式称为什么?

来自分类Dev

为什么无法向该对象添加RSpec存根方法?

来自分类Dev

为什么PySide的异常处理会延长该对象的寿命?

来自分类Dev

为什么该对象可以访问其父类的方法?

来自分类Dev

为什么该对象循环不起作用?

来自分类Dev

包含来自指针的对象,该对象是数组中对象的项目

来自分类Dev

更改范围时,为什么boost共享内存中的对象的指针变为无效?

来自分类Java

为什么在不同的进程中不能正确地序列化该Class对象?

来自分类Dev

为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

来自分类Java

对象的状态为什么可以在该对象为根的对象图中的字段的子集?

来自分类Dev

为什么该程序无法捕获异常?

来自分类Dev

为什么我不能从该对象数组中仅返回具有某些键的对象数组?

来自分类Dev

为什么我允许“直接访问”对象的受保护字段,该对象的类在其他包中定义?

来自分类Dev

为什么添加到处于状态的对象数组会更改该数组中的其他对象?(反应)

来自分类Dev

为什么允许该指针变量分配?

来自分类Dev

为什么不能分配该指针?

来自分类Dev

为什么我不能使用间接操作符取消对一个对象的指针,该对象是一个数组元素?

Related 相关文章

  1. 1

    在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

  2. 2

    为什么该对象返回相同的设置?

  3. 3

    为什么nhibernate抱怨删除该对象?

  4. 4

    为什么该对象销毁无效?

  5. 5

    提取请求,该请求返回coredata URL。为什么?以及如何访问托管对象?

  6. 6

    在新指针的构造函数中传递的Lambda函数需要访问该对象

  7. 7

    在documentSnapShot中获取值,但是将其转换为对象时,该对象返回null,为什么?

  8. 8

    如果我在lambda中删除保存该lambda的对象,究竟会发生什么?

  9. 9

    我可以在该对象的构造函数中创建一个指向该对象的指针吗?

  10. 10

    如何在函数中为新对象分配一个指针,而退出该对象后该对象不消失

  11. 11

    为什么数组的对象属性正确访问该值?

  12. 12

    为什么列出两次时该对象消失了?

  13. 13

    该对象初始化器模式称为什么?

  14. 14

    为什么无法向该对象添加RSpec存根方法?

  15. 15

    为什么PySide的异常处理会延长该对象的寿命?

  16. 16

    为什么该对象可以访问其父类的方法?

  17. 17

    为什么该对象循环不起作用?

  18. 18

    包含来自指针的对象,该对象是数组中对象的项目

  19. 19

    更改范围时,为什么boost共享内存中的对象的指针变为无效?

  20. 20

    为什么在不同的进程中不能正确地序列化该Class对象?

  21. 21

    为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

  22. 22

    对象的状态为什么可以在该对象为根的对象图中的字段的子集?

  23. 23

    为什么该程序无法捕获异常?

  24. 24

    为什么我不能从该对象数组中仅返回具有某些键的对象数组?

  25. 25

    为什么我允许“直接访问”对象的受保护字段,该对象的类在其他包中定义?

  26. 26

    为什么添加到处于状态的对象数组会更改该数组中的其他对象?(反应)

  27. 27

    为什么允许该指针变量分配?

  28. 28

    为什么不能分配该指针?

  29. 29

    为什么我不能使用间接操作符取消对一个对象的指针,该对象是一个数组元素?

热门标签

归档