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

use*_*371 1 c++ memory-leaks

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

int main()
{

   Foo * p = new Foo();

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 5

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

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

但是,如果你只想为你的系统和你的系统想要一个通用的超实用答案,是的,你可能会侥幸逃脱.

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

如果你想要一个C++答案,或者一个在代码完整性,智能设计(lol)和坦率的简单好习惯方面具有优点的答案,没有.当有人问他们扎实的实践原因,必须找到一个理由这样做delete,你可能很难时用力要提供的例子,如文件处理,网络连接和工作线程的理由.但是基本的常识要求所有这些问题都会自动得到解决,而不必单独命名每个问题,当你完成它们时,只需要花费5秒的时间来摧毁你的物体.

就是delete这样.你没有理由不去.

  • @BWG 我认为您忽略了他的构造函数也在打开文件的事实。如果相关对象打开网络套接字或数据库连接怎么办?如果它在磁盘上创建锁定文件怎么办?如果您不删除该对象,则 Foo::~Foo() 中可能实现的任何有意义的事情都不会发生。在大多数平台上,分配的内存将被操作系统回收,但还有内存以外的资源。 (2认同)