我有与此类似的C ++ 14代码:
void C::f() {
int& ref = this->x;
auto lb = [&ref]() {
/* do stuff with "ref" */
};
if (foobar) {
// call lb when signal fires.
connect(object, &D::signal, [&lb]() {
lb();
});
} else {
lb();
}
}
我知道到我使用lb
时,this
仍然有效。但是ref
和lb
呢?上面的代码有悬挂的参考吗?
答案 0 :(得分:7)
lb
具有自动存储功能,因此当此函数返回时,对其的引用将无效。
ref
的有效性取决于*this
的生存期。
(lambda不是通过引用捕获变量ref
,而是是捕获对ref
所引用对象的引用。)