函数指针和 lambda 的内存管理

Memory management of function pointers and lambdas

本文关键字:内存 管理 lambda 指针 函数      更新时间:2023-10-16

我对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变量指向哪个匿名函数。

希望这有帮助!