具有Lambda表达式的指针函数处理内存

问题描述 投票:1回答:1

我在C ++中相对较新,我对内存管理有一些疑问。我是C#开发人员,因为垃圾回收器,内存管理比C ++容易。

而且我不知道何时需要手动释放内存。

例如:

void (*ptr)() = [] { /* 1rst lambda expression code*/ };
ptr = [] { /*2nd lambda expression code*/ };

拳头lambda表达式会发生什么?,仍在记忆中吗?在重新分配'ptr'之前我必须做点什么?。

如果有人可以向我解释这个特殊情况以及C ++和内存的工作原理,我将不胜感激!。

c++ memory-management lambdaexpression
1个回答
0
投票

C ++语言处理没有捕获列表的lambda函数,就好像它们是具有某些编译器生成的名称的真实函数一样,这些名称不同于所有其他函数的名称。结果,当你写

void (*ptr)() = [] { /* 1rst lambda expression code*/ };

有点像编写以下内容:

static void _CompilerGeneratedFn137() {
    /* lambda code */
}

void (*ptr)() = &_CompilerGeneratedFn137;

实际上没有分配任何内存(ptr变量本身的空间除外),并且指针仅指向程序代码段的某个位置。然后,当您重新分配ptr指向另一个lambda时,就不会泄漏任何内存。您只是在更改ptr变量所指向的匿名函数。

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.