11

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

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

虽然出于所有意图和目的,这里没有发生泄漏(因为您的程序正在结束并且操作系统将在它返回后清理所有内存),但标准是否仍然需要 - 或推荐 -delete[]在这种情况下使用?如果没有,你会在这里有什么其他原因delete[]吗?

4

6 回答 6

12

标准中没有任何要求delete[]- 但是,我会说这是一个非常好的指导方针。

但是,最好将 a deleteordelete[]与每个newornew[]操作一起使用,即使内存将被程序终止清理。

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

此外,如果您在您的例程中移动,您不太可能在代码中的其他位置导致内存泄漏。

于 2009-04-04T02:20:44.537 回答
9

当程序退出时,是否有理由在 C++ 中调用 delete?

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

于 2009-04-04T02:22:21.007 回答
2

这里没有。但是随着程序变得越来越大和越来越复杂,我会管理我的内存,以便我可以更快地追踪错误。该标准只说在较小的情况下养成良好的习惯会导致长期更好的代码。

于 2009-04-04T02:19:43.087 回答
0

您完全可以忘记删除内容。

你喜欢浪费内存吗?

于 2009-04-04T02:18:51.497 回答
0

我不知道标准,但是围绕这个问题有一个完整的编程风格:crash-only softxare 理论上数据库或操作系统内核应该这样开发,但通常这样使用它们并不实际,因为重启时会有一些可能很长的清理工作。此外,从属系统(操作系统或数据库客户端内的程序)可能不是仅崩溃的。

于 2009-04-04T02:22:06.590 回答