【发布时间】:2020-05-29 21:47:27
【问题描述】:
我是 C++ 的新手,我对内存管理有一些疑问。
我是一名 C# 开发人员,内存管理比 C++ 更容易,因为有垃圾收集器,我不知道什么时候必须手动释放内存。
例如:
void (*ptr)() = [] { /* 1rst lambda expression code*/ };
ptr = [] { /*2nd lambda expression code*/ };
第一个 lambda 表达式会发生什么?,是否仍在内存中?,我必须在重新分配“ptr”之前做一些事情?。
如果有人可以向我解释这个特殊情况以及 C++ 和内存是如何工作的,我将不胜感激!
【问题讨论】:
-
您需要自己释放内存的唯一一次是您自己动态分配内存,通过
new运算符、malloc()-like 函数、直接操作系统内存函数等(或者您正在为您进行此类分配的库调用)。必须使用相应的释放函数释放分配的内存。任何其他时间,内存管理都会自动为您处理。由于您的 lambda 不是动态分配的,因此您没有什么可以释放的。仅仅因为你有一个指向某物的指针并不总是意味着你必须释放指向的东西
标签: c++ memory-management lambda function-pointers