考虑以下最小代码:
#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实例调用时工作正常,但是当从存储在向量中的实例调用时,我会遇到分段错误.
为什么会这样?