c++ - new 后面一定要跟着 delete 吗?

标签 c++ new-operator

<分区>

我想我们都明白在重新分配动态分配的指针以防止内存泄漏时 delete 的必要性。但是,我很好奇,C++ 在多大程度上强制使用 delete?比如下面这个程序

int main()
{
     int* arr = new int[5];
     return 0;
}

虽然出于所有意图和目的,此处不会发生泄漏(因为您的程序正在结束,操作系统将在返回后清理所有内存),但标准是否仍然需要——或推荐——使用 delete[] 在这种情况下?如果不是,是否还有任何其他原因导致您在此处删除[]

最佳答案

没有什么需要 delete[]在标准中 - 但是,我会说这是一个非常好的遵循指南。

但是,最好使用 deletedelete[]每个newnew[]操作,即使内存将被程序终止清理。

许多自定义对象都有一个析构函数,它执行其他逻辑,而不仅仅是清理内存。使用 delete保证在这些情况下进行销毁。

此外,如果您曾经四处移动您的例程,您就不太可能在代码的其他地方造成内存泄漏。

关于c++ - new 后面一定要跟着 delete 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/716353/

相关文章:

C++ 返回数组

c++ - 编译时重复语法错误

javascript - JavaScript 中关键字 'new' 有什么副作用?

c# - 使用 new 关键字调用基本方法

c++ - make_shared 与自定义新运算符

Java 到 Cpp 代码转换,有关 static 和 new 关键字的问题

c++ - 删除对象并在同一内存位置再次创建

c++ - 尝试实现 PIMPL 习语时如何避免 "redefinition; different basic types"

c++ - 不平衡随机数发生器

C++ 循环和 scanf 验证字母表、大写字母表和数字