在一些项目中找到了这样的修复:
- 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
是按值复制?
this
不是变量(它是关键字)。因此,捕获变量的正常规则不适用。capture-defaults & 和 = 都通过引用捕获this
ie指向的对象*this
。从 C++20 开始,*this
不推荐使用 when using = capture-default的隐式捕获。
使用 capture-default 与使用 capture-default 之间的明显区别在于this
,前者隐式地捕获 lambda 中使用的任何局部变量,而后者则没有。
在显示的 lambda 的情况下,它似乎没有使用任何捕获,因此任何捕获声明似乎都是多余的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句