面试真题

C++ · 中等 · 腾讯

lambda引用捕获的风险

中等 C++ 🎤 腾讯
参考答案
结论:引用捕获不延长变量生命周期,易导致悬空引用和未定义行为。核心风险:1. 返回含引用捕获的lambda,局部变量销毁后调用即悬空;2. 多线程/异步中,原作用域提前结束;3. 循环中用引用捕获循环变量,所有lambda共享同一变量最终值。原理:引用捕获仅在闭包内保存外部变量引用,不拥有所有权。示例:auto f=[&i](){return i;}; 若i出作用域后f()崩溃。建议:短同步作用域可用引用;否则值捕获、使用shared_ptr或std::ref管理生命周期。
题目整理自公开面经,答案由校招宝自研生成,仅供参考