必须在C 中删除动态分配的内存
Dynamically allocated memory has to be deleted in C++?
说我的程序中有一个list<TreeNode>
。每次我使用new
动态分配TreeNode
类并将其连接到列表时;程序结束后,列表已消失。但是,我不确定随着列表的消失,是否将自动删除所有这些元素。我是否仍然需要浏览列表,并且我自己也需要 delete
?
另外,记忆泄漏会造成什么损害?当一个过程结束后,我认为它的内存空间将发布,所以实际上没有任何损害我的计算机的后面。
现在,您的 list<TreeNode>
由于程序已经终止而摧毁自身,但是现在假设您正在使用局部list<TreeNode>
对象,这些对象在循环或其他方面创建和破坏相似的。现在,内存泄漏变成了您 do 必须担心的东西。
底线是您的代码不应泄漏,无论情况如何。唯一的例外也许是单身人士或类似模式,其中可能有一些理由让对象"无需清理"。但是对于列表类之类的东西,绝对不应该出现泄漏。
此外,如果该过程不应该关闭怎么办?如果这是一个必须每天24小时运行的任务关键应用程序,该怎么办?现在,泄漏变成了一场灾难 - 是您或(现在很生气的)同事在半夜接听电话,试图重新启动该系统。
如果您的 TreeNode
占据的东西是内存,则在退出程序时不需要释放它们。但是,如果它包含一个缓冲的写入文件流,并且您不发布该流,则可能仍然存在数据中的数据,但不会将其写入磁盘上。然后您将丢失数据丢失。: - )
P.S。我需要补充一点,只有在您的程序短暂的情况下,只有在您没有"垃圾"对象的情况下,让您的操作系统免费为您提供了这种策略(即,您需要保留对程序寿命的所有创建对象的引用)。如果它是长寿的(但您没有垃圾对象),只需使用静态内存,并且不要进行任何动态分配。如果您有垃圾对象,则需要释放它们。无话可问。: - )
如果您每次将其添加到列表时都使用new
分配TreeNode
对象,则在清除list
之前,您也必须使用delete
。P>
一个new =一个delete
- 删除类成员的动态分配内存的最佳方法是什么
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为浮点数组动态分配内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 如何为const char double指针(使用新的)动态分配内存
- 在动态分配内存的同时,使用指定尺寸
- 动态分配内存
- 如何在我指向的安德烈斯上动态分配内存?
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 当动态分配内存时警告
- 为结构动态分配内存
- 动态分配内存,用于存储使用 WinHttpReadData 下载的 HTML 源代码
- 如何在C++中为灵活阵列动态分配内存
- 从C++中的文件读取时动态分配内存到结构
- 在c++中的赋值运算符重载方法中删除旧的动态分配内存
- 在类方法中使用新运算符动态分配内存的寿命和范围是多少
- 以C++为单位的动态分配内存的初始值
- 虚拟析构函数:如果基类动态分配内存,基类中是否需要它
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存