函数指针和 lambda 的内存管理
Memory management of function pointers and lambdas
我对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
变量指向哪个匿名函数。
希望这有帮助!
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理