主要完成后C ++内存泄漏?

时间:2014-01-15 02:07:56

标签: c++ memory-leaks

这是内存泄漏吗?假设Foo()是一个带有默认构造函数的类

int main()
{

   Foo * p = new Foo();

   return 0;
}

我认为这不是泄漏,因为应用程序会在主要结束后立即结束,并且一旦完成,操作系统就会释​​放该应用程序的所有资源。这个假设是对的吗?

1 个答案:

答案 0 :(得分:5)

是的,在你的程序中,它是一个泄漏。您没有取消分配Foo

您的操作系统是否会回收进程的内存?也许,也许不是。当然,Windows会重新使用内存。

但是,如果你只想为你的系统和你的系统寻找一个通用的超实用答案,是的,你可能会侥幸成功。

但是,在任何情况下,您的操作系统都不会神奇地释放间接资源。 Foo的析构函数可能不仅仅是内存解除分配

如果你想要一个C ++答案,或者一个在代码完整性,智能设计(lol)方面具有优点的答案,而且坦率地说就是好习惯, no 。当有人要求他们必须找到理由来执行delete的实际原因时,在强制提供文件句柄,网络连接和工作线程等示例时,很难证明这是正确的。但基本常识要求所有这些问题都是自动处理,而不必单独命名每个,当你只需要花费5秒的时间来消灭你完成它们时的对象。

只需delete它。你没有理由不去。