我对C++比较陌生,对内存管理有一些疑问。
我是一个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
变点在。
希望对大家有所帮助!