如果我有一个类似的功能:
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
。