通过引用传递的 Lambda 在构造函数中被调用时会运行,但在后来存储在数据成员中时不会运行。

通过引用传递的 Lambda 在构造函数中被调用时会运行,但在后来存储在数据成员中时不会运行。

💡 原文中文,约900字,阅读约需3分钟。
📝

内容提要

讨论了C++中Lambda函数的生命周期问题,当Lambda函数被转换为std::function时,会创建临时对象并在构造函数调用后销毁。解决方案是将std::function存储为值而不是引用。

🎯

关键要点

  • C++中的Lambda函数生命周期问题导致崩溃。
  • Lambda函数被转换为std::function时,会创建临时对象并在构造函数调用后销毁。
  • 存储对std::function的引用而不是值会导致Lambda函数失效。
  • 即使使用模板直接使用Lambda类型,Lambda也会在后续阶段销毁。
  • 临时对象在绑定到函数参数时不会延长生命周期。
  • 使用花括号绑定时,临时对象的生命周期会延长。
  • 解决方案是将std::function存储为值而不是引用。
➡️

继续阅读