c++ - 我是否需要对 C++ 中的每个 new 使用 delete?

标签 c++ memory-leaks

如果我有这样的功能:

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如果你不想。

关于c++ - 我是否需要对 C++ 中的每个 new 使用 delete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19629683/

相关文章:

c++ - 通过 FTP/SSH 通过 vps 远程使用 C++ 编程的最佳方式

c++ - 扩展类而不更改其名称

c# - CollectionView.View.Refresh 上的内存泄漏

java - 更换 fragment 时内存泄漏

c++ - Valgrind 8 个字节,包含 16 个免费 block

c++ - 如何调节类模板和原始类型模板

c++ - std c++ 容器元素销毁和插入行为

c++ - std::norm(std::complex) 使用平方根而不是快速实现

java - 并发查询和删除,导致Neo4j 2.0.3社区内存泄漏

java - 通过创建一个新数组并确保没有发生内存泄漏来扩展 Java 数组