如果我有一个类似的功能:

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中,对newdelete的所有必要调用都在容器内完成,您无需关心它们。

    您可以这样编写函数:
    #include <vector>
    
    void MyFunctoin(int size){
      // ...
      std::vector<int> arr(size);
      // ...
    }
    

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

    10-07 19:18
    查看更多