我认为在重新分配动态分配的指针时,我们都理解删除的必要性,以防止内存泄漏.但是,我很好奇,C++在多大程度上强制要求使用delete?例如,采取以下计划
int main() { int* arr = new int[5]; return 0; }
虽然所有意图和目的都没有发生泄漏(因为你的程序结束了,操作系统会在它返回后清理所有内存),但标准是否还需要 - 或建议 - 在这种情况下使用delete [] ?如果没有,还有其他原因你会在这里删除[]吗?
没有什么需要在标准中删除[]但是,我会说这是一个非常好的指导方针.
但是,最好在每次新的或新的[]操作中使用delete或delete [],即使程序终止也会清除内存.
许多自定义对象都有一个析构函数,它可以执行其他逻辑,而不仅仅是清理内存.使用delete可以保证在这些情况下的销毁.
此外,如果您在常规中移动,则不太可能在代码中的其他位置导致内存泄漏.
Dupe of 有没有理由在程序退出时用C++调用delete?
答案是,由于需要运行的析构函数,有时需要在退出程序之前删除该对象.此外,如果您不这样做,许多内存泄漏检测工具会抱怨,因此为了更容易找到真正的内存泄漏,您应该在退出之前尝试删除所有对象.
请参阅:
何时使用"new"和何时不使用,在C++中?
关于C++中用于自定义对象的构造函数/析构函数和new/delete运算符
在Visual C++中删除和删除[]相同?
为什么有一个特殊的new和删除数组?
如何在C++中跟踪内存分配(尤其是新建/删除)
结构数组和新/删除
new/delete和malloc/free有什么区别?