我是否需要对C++中的每个新用途使用删除?

Aan*_*Aan 2 c++ memory-leaks

如果我有这样的功能:

void MyFunctoin(int size){
// ...
int *arr=new int[size];
// ...
}
Run Code Online (Sandbox Code Playgroud)
  • 有内存泄漏吗?
  • 如果是的话,有没有办法解决它而不使用delete

Gor*_*pik 7

标题问题的答案很简单:是的,每个问题new必须与a匹配delete.在你的情况下,因为你使用过new[],必须有一个delete[]地方.

但你不需要自己写.使用管理自己资源的类通常要好得多.在你的情况下,你最好使用STL容器,如array<>vector<>.这是:

std::array<int, size> arr; // fixed size (known at compile time)
Run Code Online (Sandbox Code Playgroud)

要么

std::vector<int> arr; // variable size
Run Code Online (Sandbox Code Playgroud)

vector,所有必要的调用newdelete在容器内完成,你不需要关心它们.

你可以这样编写你的函数:

#include <vector>

void MyFunctoin(int size){
  // ...
  std::vector<int> arr(size);
  // ...
}
Run Code Online (Sandbox Code Playgroud)

并且不会有任何内存泄漏,无需在delete任何地方调用.如果您不想要,则无需size在构造时指定arr.


For*_*veR 6

是的.使用smart pointers/ STL containers(例如std::vector/ boost::shared_array/ std::unique_ptr<T[]>在您的情况下).

  • @Koushik不同的语义.它要求`size`是一个编译时常量,并在函数的"堆栈"上使用空格. (2认同)