为什么使用关键字delete?

时间:2011-06-21 14:37:13

标签: memory-management heap-memory

我知道delete会将内存返回给堆分配的堆,但有什么意义呢?电脑有充足的记忆吗?一旦“X”退出程序,就会返回所有内存。

4 个答案:

答案 0 :(得分:3)

示例:

考虑一个为它接收的每个数据包分配一个对象Packet的服务器(为了这个例子,这是一个糟糕的设计)。 服务器本质上是永远不会关闭。如果您永远不会delete每秒数千Packet个服务器处理,那么您的系统将在几分钟内崩溃并崩溃。

另一个例子:

考虑一个视频游戏,每次创建新爆炸时都会为特殊效果分配粒子(并且永远不会删除它们)。在像星际争霸(或其他近期的)游戏中,经过几分钟的欢闹和破坏(以及数以千计的粒子),滞后将是如此巨大,以至于你的游戏将变成PowerPoint幻灯片,有效地让你的玩家不高兴。

答案 1 :(得分:2)

并非所有程序都快速退出。

某些应用程序可能会运行数小时,数天或更长时间。守护进程可以设计为不停止运行。程序在其生命周期内可以轻松消耗比机器上可用的更多内存。

此外,并非所有程序都是孤立运行的。大多数人需要与其他应用程序共享资源。

答案 2 :(得分:1)

您应该管理内存使用情况以及使用的任何其他计算机资源有很多原因:

  • 作为一个轻量级程序可能会很快变得更加复杂,具体取决于您的设计区域的内存消耗可能呈指数级增长。
  • 请记住,您正在与其他程序共享内存资源。作为一个好邻居,其他进程可以使用你释放的内存,并有助于保持整个系统的稳定。
  • 您不知道您的程序可能会运行多长时间。有些人休眠他们的会话(或从不关闭他们的计算机),并可能让你的程序运行多年。

还有很多其他原因,我建议研究内存分配,了解有关做什么和不做的更多细节。

答案 3 :(得分:1)

我明白你的意思,什么电脑有很多记忆,但你错了。作为工程师,您必须创建程序,正确使用计算机资源的是什么。

想象一下,你制作的程序一直运行,然后计算机开启。它有时会使用" new"创建一些对象/变量。过了一段时间,你不再需要它们了,你也不能删除它们。这种情况时有发生,你只是让一些RAM缺货。一段时间后,用户必须终止您的程序并再次启动它。它不是那么糟糕,但它不那么舒服,更重要的是,你的程序可能会加载一段时间。因为这些用户对你的愚蠢决定感到不好。

另一件事。然后你使用" new"创建对象,你调用构造函数和"删除"调用析构函数。让我们说你需要打开so文件,析构函数关闭它并使其可以访问其他进程,在这种情况下,你不仅会记忆内存,还会来自其他进程的文件。

如果您不想使用"删除"你可以使用共享指针(它有垃圾收集器)。 它可以在STL,std :: shared_ptr中找到,它有一个不同的优点,WIN XP SP 2和更旧的不支持这个。因此,如果你想为公众创建一些东西你应该使用boost它也有boost :: shared_ptr。要使用boost,您需要从here下载它并配置您的开发环境以使用它。