我在C ++中相对较新,我对内存管理有一些疑问。我是C#开发人员,因为垃圾回收器,内存管理比C ++容易。
而且我不知道何时需要手动释放内存。
例如:
void (*ptr)() = [] { /* 1rst lambda expression code*/ };
ptr = [] { /*2nd lambda expression code*/ };
拳头lambda表达式会发生什么?,仍在记忆中吗?在重新分配'ptr'之前我必须做点什么?。
如果有人可以向我解释这个特殊情况以及C ++和内存的工作原理,我将不胜感激!。
C ++语言处理没有捕获列表的lambda函数,就好像它们是具有某些编译器生成的名称的真实函数一样,这些名称不同于所有其他函数的名称。结果,当你写
void (*ptr)() = [] { /* 1rst lambda expression code*/ };
有点像编写以下内容:
static void _CompilerGeneratedFn137() {
/* lambda code */
}
void (*ptr)() = &_CompilerGeneratedFn137;
实际上没有分配任何内存(ptr
变量本身的空间除外),并且指针仅指向程序代码段的某个位置。然后,当您重新分配ptr
指向另一个lambda时,就不会泄漏任何内存。您只是在更改ptr
变量所指向的匿名函数。
希望这会有所帮助!