gpt4 book ai didi

c++ - 为什么要删除new分配的内存呢?

转载 作者:行者123 更新时间:2023-11-27 23:54:28 25 4
gpt4 key购买 nike

据说 new 分配的内存应该由 delete 释放,但现代桌面操作系统会回收内存,即使你不 删除它。那么我们为什么要deletenew分配的内存呢?

此外,assert 被称为不调用析构函数,它似乎在 STL 中被广泛使用(至少 VS2015 是这样)。如果建议删除new分配的内存(stringmapvector 使用析构函数删除分配的内存),为什么开发人员仍然使用大量的 assert

最佳答案

Why should we delete the memory allocated by new?

因为否则

  1. 内存泄漏。不泄漏内存对于服务器和守护程序等长时间运行的软件绝对至关重要,因为泄漏会累积并消耗所有可用内存。

  2. 不会调用对象的析构函数。程序的逻辑可能取决于被调用的析构函数。不调用某些析构函数也可能导致非内存资源泄漏。

Also assert is known as not calling the destructors

断言失败会终止整个进程,因此程序逻辑是否保持一致、内存或其他资源是否泄漏都无关紧要,因为进程无论如何都不会重用这些资源。

and it seems like it's widely used in STL (at least VS2015 does that)

准确地说,我认为标准库并没有指定使用断言宏。它可以使用它的唯一情况是你有未定义的行为。如果您有 UB,那么内存泄漏是您最不担心的事情。


如果您知道该对象的析构函数是微不足道的,并且您知道该对象在整个程序中都在使用(因此,它本质上是一个单例),那么故意泄露该对象是非常安全的。这确实有一个缺点,即它会被内存泄漏清理器检测到,您可能希望使用它来检测意外内存泄漏。

关于c++ - 为什么要删除new分配的内存呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com