【发布时间】:2023-03-26 21:32:01
【问题描述】:
考虑以下代码:
int counter = 0;
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, [this, &counter]() mutable {
counter++;
qDebug() << counter;
});
timer->start(500);
预期:
1
2
3
4
...
输出:
32766 (a random number)
...
这里有一些未定义的东西吗?我找不到有关此效果的任何信息。
【问题讨论】:
-
捕获对局部变量的引用。一旦该局部变量死亡(因为您离开了定义它的范围),您就会有一个悬空引用。
-
这就是解决方案!在将“counter”变成类成员变量后,它就永远不会死,也不会再有悬空引用。谢谢!