如果我有这样的功能:
void MyFunctoin(int size){
// ...
int *arr=new int[size];
// ...
}
- 是否存在内存泄漏?
- 如果是,有没有不用
delete
的方法解决?
最佳答案
标题问题的答案很简单:是的,每个 new
必须与 delete
匹配.在你的情况下,因为你使用了 new[]
, 必须有一个 delete[]
某处。
但是你不需要自己写。使用管理自己资源的类通常要好得多。在您的情况下,您最好使用 STL 容器,例如 array<>
或 vector<>
.这是,要么:
std::array<int, size> arr; // fixed size (known at compile time)
或
std::vector<int> arr; // variable size
在vector
, 所有必要的调用 new
和 delete
在容器内完成,您无需关心它们。
你可以这样写你的函数:
#include <vector>
void MyFunctoin(int size){
// ...
std::vector<int> arr(size);
// ...
}
并且不需要调用 delete
不会有任何内存泄漏任何地方。您不需要指定 size
施工时arr
如果你不想。
关于c++ - 我是否需要对 C++ 中的每个 new 使用 delete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19629683/