我是否需要在 c++ 中从本地指针中释放分配的内存?
Do i need to free allocated memory from local pointers in c++?
void f() {
int *ptr = new int;
// is the following line necessary?
delete ptr;
}
int main() {
f();
return 0;
}
我是否必须释放函数 f 中分配的内存,还是因为不再引用该内存而自动释放?
在 c++ 中,我是否需要从本地指针中释放分配的内存?
如果你想避免内存泄漏 - 你应该想要 - 那么你应该分解你分配的所有内容。每个分配new
应该有一个delete
。
还是自动释放
动态分配不会自动释放。
因为不再引用该记忆了?
是否引用内存与是否解除分配内存无关紧要。如果动态内存未被任何内容引用,则内存已泄漏。C++没有垃圾回收。
某些类确实会分配内存并在其析构函数中释放该分配。这个成语被称为RAII(查找首字母缩写以了解更多信息(。指针不是类,它没有析构函数。指针生存期的结束对指向的对象没有影响。
应避免使用裸拥有指针。我建议使用 RAII 容器或智能指针(实际上不是指针,而是类(来管理内存。标准库提供开箱即用的这些。此外,避免在不需要时进行动态分配。
几乎不需要直接使用new
和delete
,应尽可能避免使用。
C++没有垃圾回收器。如果使用new
运算符动态分配内存,则必须使用delete
运算符释放内存。
因此,如果分配的内存:
int *ptr = new int;
在退出函数之前未释放。
您可以使用智能指针来避免此类问题,例如std::unique_ptr
,例如:
#include <memory>
//...
void f() {
std::unique_ptr<int> ptr = std::make_unique<int>();
//...
}
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 错误:释放指针未分配在矢量模板类C 中
- 如何在指针初始化为数组的第一个索引后释放指针
- 如何释放指针树中的所有内存
- 从 std::align 中释放指针
- C :释放指针没有分配在课堂上
- 构造向量 C++ 后无法释放指针
- nullptr是否释放指针的内存
- C/C++ 通过调用引用或直接释放指针
- 分段释放指针向量的错误
- 有效地从指向对象本身释放指针
- 如何释放指针向量中的元素
- Sqlite c/c++api,负责从sqlite3_column_text中释放指针
- 释放指针后分配给指针
- 正在释放指针