必须新的一直跟着删除?

GRB*_*GRB 11 c++ new-operator

我认为在重新分配动态分配的指针时,我们都理解删除的必要性,以防止内存泄漏.但是,我很好奇,C++在多大程度上强制要求使用delete?例如,采取以下计划

int main()
{
     int* arr = new int[5];
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然所有意图和目的都没有发生泄漏(因为你的程序结束了,操作系统会在它返回后清理所有内存),但标准是否还需要 - 或建议 - 在这种情况下使用delete [] ?如果没有,还有其他原因你会在这里删除[]吗?

Ree*_*sey 12

没有什么需要在标准中删除[]但是,我会说这是一个非常好的指导方针.

但是,最好在每次新的或新的[]操作中使用delete或delete [],即使程序终止也会清除内存.

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

此外,如果您在常规中移动,则不太可能在代码中的其他位置导致内存泄漏.


Bri*_*ell 8

Dupe of 有没有理由在程序退出时用C++调用delete?

答案是,由于需要运行的析构函数,有时需要在退出程序之前删除该对象.此外,如果您不这样做,许多内存泄漏检测工具会抱怨,因此为了更容易找到真正的内存泄漏,您应该在退出之前尝试删除所有对象.


归档时间:

查看次数:

8147 次

最近记录:

7 年,5 月 前