Lambda被引用捕获并在广告位中使用

时间:2019-05-16 09:46:10

标签: c++ c++14

我有与此类似的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仍然有效。但是reflb呢?上面的代码有悬挂的参考吗?

我发现了类似的问题(herethere,...),但我无法得出结论。

1 个答案:

答案 0 :(得分:7)

lb具有自动存储功能,因此当此函数返回时,对其的引用将无效。

ref的有效性取决于*this的生存期。
(lambda不是通过引用捕获变量ref,而是是捕获对ref所引用对象的引用。)