这是内存泄漏吗?假设Foo()是一个带有默认构造函数的类
int main()
{
Foo * p = new Foo();
return 0;
}
我认为这不是泄漏,因为应用程序会在主要结束后立即结束,并且一旦完成,操作系统就会释放该应用程序的所有资源。这个假设是对的吗?
答案 0 :(得分:5)
是的,在你的程序中,它是一个泄漏。您没有取消分配Foo
。
您的操作系统是否会回收进程的内存?也许,也许不是。当然,Windows会重新使用内存。
但是,如果你只想为你的系统和你的系统寻找一个通用的超实用答案,是的,你可能会侥幸成功。
但是,在任何情况下,您的操作系统都不会神奇地释放间接资源。 Foo
的析构函数可能不仅仅是内存解除分配。
如果你想要一个C ++答案,或者一个在代码完整性,智能设计(lol)方面具有优点的答案,而且坦率地说就是好习惯, no 。当有人要求他们必须找到理由来执行delete
的实际原因时,在强制提供文件句柄,网络连接和工作线程等示例时,很难证明这是正确的。但基本常识要求所有这些问题都是自动处理,,而不必单独命名每个,当你只需要花费5秒的时间来消灭你完成它们时的对象。
只需delete
它。你没有理由不去。