You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Lambda捕获局部变量延长其生命周期的代码示例问询

Lambda捕获局部变量并延后执行的代码示例

你提到的描述可以通过代码直观体现,下面以C++为例展示这个过程:

#include <iostream>
#include <functional>

// 返回一个捕获了局部变量的Lambda
std::function<void()> getDelayedExecutor() {
    int local_num = 100; // 这个局部变量的作用域仅限于当前函数
    // 值捕获local_num,Lambda会保存该变量的副本
    return [local_num]() {
        std::cout << "延后执行时访问的局部变量值:" << local_num << std::endl;
    };
}

int main() {
    // 获取Lambda,此时getDelayedExecutor已执行完毕,local_num本应被销毁
    auto delayed_func = getDelayedExecutor();
    // 延后执行Lambda,此时依然能访问捕获的变量
    delayed_func();
    return 0;
}

代码说明

  • local_num是getDelayedExecutor函数内的局部变量,按照常规逻辑,函数执行结束后该变量会被销毁。
  • 但Lambda通过值捕获的方式保存了local_num的副本,这个副本会被包含在Lambda对象中,随Lambda一起被返回并存储在main函数的delayed_func里。
  • 当在main中调用delayed_func时,虽然原local_num已经不存在,但Lambda里的副本依然有效,实现了代码的延后执行。

注意事项

如果使用引用捕获([&local_num]),会导致悬垂引用问题——因为原局部变量已经销毁,Lambda引用的是一块已释放的内存,访问时会触发未定义行为,这种场景下值捕获才是安全的选择。

内容的提问来源于stack exchange,提问作者Ken Kiarie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:38:14