如果类的非静态成员函数中的lambda表达式想要访问 this
指针,有以下形式
class ExampleClass
{
public:
void func()
{
auto CaptureThisByReference = [&](){ value = 1;} // Equal to (*this).value = 1;
auto CaptureThisByValue = [=](){ value = 2;} // Equal to (*this).value = 2;
CaptureThisByReference();
CaptureThisByValue();
}
private:
int value;
};
也就是说,我们在lambda表达式中存储了一个指针。
考虑下面这种情况
class ExampleClass
{
public:
auto func()
{
auto CaptureThisByValue = [=](){ value = 2;} // Equal to (*this).value = 2;
return CaptureThisByValue;
}
private:
int value;
}
std::function<void()> myFunction;
{
ExampleClass obj;
myFunction = obj.func();
}
myFunction(); //can not work, becase obj has been destroyed
p0018 给出的解决方案是使用*this
。*this
表示以值来捕获当前this
指针指向的对象,相当于在lambda中存储了整个对象,而不是简单的指针。