函数指针和lambda的内存管理 我在C++中比较新,我有一些关于内存管理的问题。 我是C开发人员,内存管理比C++更容易,因为垃圾回收器,我不知道什么时候我必须手动释放内存。

函数指针和lambda的内存管理 我在C++中比较新,我有一些关于内存管理的问题。 我是C开发人员,内存管理比C++更容易,因为垃圾回收器,我不知道什么时候我必须手动释放内存。,c++,memory-management,lambda,function-pointers,C++,Memory Management,Lambda,Function Pointers,例如: void (*ptr)() = [] { /* 1rst lambda expression code*/ }; ptr = [] { /*2nd lambda expression code*/ }; 第一个lambda表达式发生了什么?仍在内存中?在重新指定“ptr”之前,我必须做些什么 如果有人能给我解释一下这个特殊的案例,以及C++和内存是如何工作的,我会很感激的。C++语言处理lambda函数而不捕获列表,好像它们是真正的函数,有些编译器生成的名称不同于所有其他函数的名称。因

例如:

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
变量所指向的匿名函数


希望这有帮助

您自己需要释放内存的唯一时间是通过
new
操作符、类
malloc()
-函数、直接操作系统内存函数等动态分配内存时(或者您正在进行库调用来为您分配内存)。必须使用相应的释放函数释放分配的内存。其他任何时候,内存管理都会自动为您处理。由于您的lambda不是动态分配的,因此您没有什么可以释放的。仅仅因为你有一个指向某物的指针并不总是意味着你必须释放所指向的东西