c++通过值或引用在lambda内部分配指针值

标签 c++ pointers c++11 lambda

如果我通过调用 fun1() 赋值,lambda 之外的 x 变量将被破坏(无法读取内存),但如果我运行 fun2() 一切都是好的。为什么?指针的拷贝仍然指向同一个东西,对吗?那为什么 fun1() 不起作用呢?

int *x = NULL;
    auto fun1 = [x]() mutable
    {
        x = new int(5);
    };
    auto fun2 = [&x]()
    {
        x = new int(5);
    };

最佳答案

auto fun1 = [x]() mutable { ... }

通过拷贝捕获x,因此它修改了x的拷贝。当 lamdba 返回时,您的 x 仍未分配。

auto fun2 = [&x]() { ... }

通过引用捕获 x,因此您确实在修改 x

这与 lambda 无关:常规函数存在相同的行为 (see value and reference semantics entry in the C++ FAQ )

关于c++通过值或引用在lambda内部分配指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25444161/

相关文章:

c++ - 插入到 unordered_map 的 unordered_map 中?

c++ - 访问视频的每一帧并对其进行处理

c++ - 如何在不使用任何第三方库的情况下在 C++ 中反序列化 json 字符串

C++:如何正确注册和取消注册应用程序的文件类型关联(以编程方式)

c - 如何完全反转 C 风格的字符串

将 1d 缓冲区重新组织为 2d 数组时崩溃

c++ - 模板参数序列的模板函数调用序列

c++ - 无法将指针位置设置为 C++ 中另一个指针位置的位置

c++ - 如何通过不可变类型的 "pipeline"传递信息

c++ - 成员模板静态函数的类型特征