小编Spa*_*nol的帖子

存储在容器中的C++ Lambda捕获"this"

考虑以下最小代码:

#include <functional>
#include <iostream>
#include <string>
#include <vector>

class A
{
public:
  A() :
    s("dummy"),
    f([&, this]{ return s == "dummy"; }),
  {}
  std::string s;
  std::function<bool ()> f;
};

int main(int argc, char *argv[])
{
  A a;
  a.f(); // seems fine

  std::vector<A> as({});
  as[0].f(); // segmentation fault
}
Run Code Online (Sandbox Code Playgroud)

A有一个捕获this指针的lambda成员.运行上面的代码时,lambda在从独立A实例调用时工作正常,但是当从存储在向量中的实例调用时,我会遇到分段错误.

为什么会这样?

c++ lambda c++11

2
推荐指数
1
解决办法
313
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1