Lambda通过参考传递的功能
Lambda functions passing by reference
lambda函数将传递给GUI类,然后在触发GUI时执行。当我第一次运行算法时,一切都很好,那么当GUI触发lambda时,应用程序失败了。
我有以下代码:
RenderObject* renObj = m_geometry[(size_t)ObjectType::plant];
PlaneAlg alg(renObj);
alg.run();
PlaneConfig& config = alg.getConfig();
auto configSetter = [&](double d) {
config.threshold = d;
alg.run();
};
QFrame* frame = gui.makeSpinLabel("Threshold: ", 0.1, config.threshold, configSetter);
每当执行lambda函数时,config和alg变量被显示为未初始化。我很困惑,因为我认为我已经通过添加&在支架之间。
谢谢您的帮助。
您说" lambda函数将传递给GUI类,然后在GUI触发时执行 "。
如果是这种情况,则意味着将alg
和config
作为参考的LAMBDA比这两个变量的范围都超过了范围。当调用Lambda并尝试访问其悬挂参考的参考文献并且您的行为不确定的那一刻。
PlaneAlg alg(renObj);
这是一个具有自动存储持续时间的对象。
lambda功能传递给GUI类,然后在触发GUI时执行。
听起来很像您将lambda用作回调。我可以假设创建lambda的功能与以下内容相似吗?
是正确的吗?gui.on_what_ever (configSetter);
// some code
return /*what ever*/;
如果是这样,则alg
对象在此处脱离范围,该对象结束了其寿命。然后,任何对其的引用(或任何子对象)是无效的,不得使用,否则这会导致不确定的行为。
要解决此问题,只要Lambda可能使用它,您就需要确保alg
对象保持活力。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- C++错误消息*成员参考.**初学者*
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- 模板功能不使用RVALUE参考实例化/接收呼叫
- 如何编写工厂功能以在C 中初始化constexpr参考
- 如何检查正确操作数以通过参考返回功能
- C 超载相等运算符.我应该写自己的功能以接受通过参考或值传递的参数
- Lambda通过参考传递的功能
- 提供功能版本,其中可用值和参考
- C 功能具有参考参数错误的迭代器错误.寻求解释
- CLION不确定对功能的参考
- C 性能:通过参考通过对象与功能的对象传递
- rvalue参考绑定到std ::功能类型的LVALUE
- 编译器无法在循环递归参考中找到功能
- 通过参考辅助功能传递随机数生成器MT19937是正确的吗?
- 通过递归模板中的参考传递模板功能
- 从基本指针/参考调用正确的免费功能
- 我在哪里可以找到一个官方的参考资料,列出了上交所的内在功能的运作