必须在C 中删除动态分配的内存

Dynamically allocated memory has to be deleted in C++?

本文关键字:动态分配 内存 删除      更新时间:2023-10-16

说我的程序中有一个list<TreeNode>。每次我使用new动态分配TreeNode类并将其连接到列表时;程序结束后,列表已消失。但是,我不确定随着列表的消失,是否将自动删除所有这些元素。我是否仍然需要浏览列表,并且我自己也需要 delete

另外,记忆泄漏会造成什么损害?当一个过程结束后,我认为它的内存空间将发布,所以实际上没有任何损害我的计算机的后面。

现在,您的 list<TreeNode>由于程序已经终止而摧毁自身,但是现在假设您正在使用局部list<TreeNode>对象,这些对象在循环或其他方面创建和破坏相似的。现在,内存泄漏变成了您 do 必须担心的东西。

底线是您的代码不应泄漏,无论情况如何。唯一的例外也许是单身人士或类似模式,其中可能有一些理由让对象"无需清理"。但是对于列表类之类的东西,绝对不应该出现泄漏。

此外,如果该过程不应该关闭怎么办?如果这是一个必须每天24小时运行的任务关键应用程序,该怎么办?现在,泄漏变成了一场灾难 - 是您或(现在很生气的)同事在半夜接听电话,试图重新启动该系统。

如果您的 TreeNode占据的东西是内存,则在退出程序时不需要释放它们。但是,如果它包含一个缓冲的写入文件流,并且您不发布该流,则可能仍然存在数据中的数据,但不会将其写入磁盘上。然后您将丢失数据丢失。: - )

P.S。我需要补充一点,只有在您的程序短暂的情况下,只有在您没有"垃圾"对象的情况下,让您的操作系统免费为您提供了这种策略(即,您需要保留对程序寿命的所有创建对象的引用)。如果它是长寿的(但您没有垃圾对象),只需使用静态内存,并且不要进行任何动态分配。如果您有垃圾对象,则需要释放它们。无话可问。: - )

如果您每次将其添加到列表时都使用new分配TreeNode对象,则在清除list之前,您也必须使用delete。P>

一个new =一个delete