知识卡片
默认捕获藏生命周期
内容
默认引用捕获可能引用已销毁的局部变量;默认按值捕获也可能只保存 this 指针,并不复制整个对象。静态变量访问更不等于捕获副本。显式列出捕获能暴露生命周期依赖,但仍要确认被引用对象是否活得足够久。
参考来源
- 位置:《Effective Modern C++》第6章《lambda表达式》,条款三十一:避免使用默认捕获模式(源文件:_epub-src/EPUB/text/ch007.xhtml)
- 结论依据:原文指出按引用和按值默认捕获分别可能藏悬空引用或指针,静态变量不被复制捕获。
- 原始内容:默认的按引用捕获可能会导致悬空引用。 默认的按值捕获对于悬空指针很敏感(尤其是 this 指针),并且它会误导人产生 lambda 是独立的想法。