gpt4 book ai didi

c++ - 函数指针和 lambda 的内存管理

转载 作者:行者123 更新时间:2023-12-01 14:22:48 24 4
gpt4 key购买 nike

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

希望这对您有所帮助!

关于c++ - 函数指针和 lambda 的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62095051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com