在某些项目中找到了这样的修复程序:
- use([=](Foo* &df) {
+ use([this](Foo* &df) {
delete df;
df = nullptr;
});
其中use
是:
template<class LAMBDA>
void use(LAMBDA callback) {
LOCK lock(this->mutex);
callback(this->data);
}
这里发生了什么,为什么[=]
和[this]
有所作为?
this
只是一个指针,因此应按值复制它,而[=]
应等效于[this]
,
还是使用[=]
通过值复制this
指向的对象?
答案 0 :(得分:1)
this
不是变量(它是关键字)。因此,捕获变量的常规规则不适用。捕获默认值&和=均捕获this
指向的对象,即*this
所引用。从C ++ 20开始,不建议使用= capture-default时*this
的隐式捕获。
使用capture-default和this
之间的明显区别是,前者隐式捕获了lambda中使用的任何局部变量,而后者则没有。
对于所示的lambda,似乎没有使用任何捕获,因此任何捕获声明似乎都是多余的。