我知道删除将内存返回给分配给堆的堆,但是有什么意义?电脑有很多内存不是吗?只要你“X”退出程序,所有的内存都会返回。为什么你使用关键字删除?
回答
实施例:
考虑到分配对象Packet
为每个收到的数据包的服务器(这是不好的设计为举例起见)。 本质上,服务器旨在从不关闭。如果你从来没有delete
数千个Packet
你的服务器每秒处理,你的系统将在几分钟内瘫痪并崩溃。
又如:
考虑一个视频游戏的特效分配颗粒,每次新的爆炸创建(永不删除它们)。在像星际争霸(或其他最近的游戏)这样的游戏中,经过几分钟的欢闹和破坏(以及数千个粒子的漩涡),滞后将会非常巨大,以至于您的游戏将变成PowerPoint幻灯片,从而使您的玩家不高兴。
好吧,这是有道理的 – Iowa15
并非所有程序都很快退出。
某些应用程序可能运行数小时,数天或更长时间。守护进程可能被设计为不停地运行。程序可以在整个生命周期内消耗更多的内存,比机器上的更多。
另外,并非所有程序都是孤立运行的。大多数需要与其他应用程序共享资源。
有很多的原因,你应该管理你的内存使用情况,以及你使用任何其它计算机资源:
- 什么可能一开始是一个轻量级的项目可能很快就会变得更加复杂,这取决于您的内存消耗设计领域可能呈指数增长。
- 请记住,您正在与其他程序共享内存资源。作为一个好邻居允许其他进程使用你释放的内存,并有助于保持整个系统的稳定。
- 你不知道你的程序可能运行多长时间。有些人休眠他们的会话(或者永远不要关闭他们的计算机),并可能让你的程序运行多年。
还有很多其他的原因,我建议研究内存分配的更多细节的做和不该做的。
我明白你的观点,哪些电脑有很多的记忆,但你错了。作为一名工程师,您必须创建程序,正确使用计算机资源。
想象一下,你制作的程序一直运行,然后计算机开启。它有时会用“新”来创建一些对象/变量。一段时间后,你不再需要它们,而且不会删除它们。这种情况不时出现,你只是让一些内存缺货。一段时间后,用户必须终止程序并重新启动。它并没有那么糟糕,但它并不那么舒服,更重要的是,你的程序可能会加载一段时间。因为这些用户对你愚蠢的决定感到不好。
另一件事。然后你使用“new”来创建你调用构造函数的对象和“删除”调用析构函数。假设你需要打开这样的文件,并且析构函数关闭它,并使其在其他进程中可访问,这种情况下,不仅会压缩内存,还会压缩来自其他进程的文件。
如果不希望使用“删除”就可以使用共享指针(它有垃圾收集器)。 它可以在STL中找到,std :: shared_ptr,它有一个缺点,WIN XP SP 2和更旧版本不支持这个。所以如果你想为公开创建一些你应该使用boost,它也有boost :: shared_ptr。要使用提升,您需要从here下载并配置您的开发环境以使用它。
- 1. 为什么不使用new关键字
- 2. 为什么使用void关键字?
- 3. javascript,为什么不删除var关键字?
- 4. 什么时候你会在PHP中使用$ this关键字?
- 5. 为什么GORM执行级联删除,即使省略belongsTo关键字?
- 6. 与 “删除” 关键字
- 7. 为什么我不能删除外键?
- 8. 什么是synchronized关键字的使用?
- 9. 为什么MySQL使用临时表来删除主键?
- 10. 你为什么使用T4?
- 11. 为什么没有按键处理删除键和退格键
- 12. 为什么存在异步关键字
- 13. 为什么“包装”关键字和.h?
- 14. 为什么Collate关键字出错?
- 15. 为什么Clojure除了“符号”还有“关键字”?
- 16. 为什么你不能使用SQLite ROWID作为主键?
- 17. 为什么@ Html.Label()删除一些字符
- 18. 我不明白为什么使用throw关键字
- 19. 为什么使用可变的关键字
- 20. 为什么在UITableViewCell标识符中使用static关键字?
- 21. 为什么使用“for”关键字绑定HTML中的标签?
- 22. 为什么Switch语句只能使用true关键字?
- 23. 为什么模板可以直接使用$ this关键字?
- 24. Python中为什么不使用Inf,-Inf和NaN关键字?
- 25. PHP类为什么使用public关键字?
- 26. 为什么不能在这里使用'this'关键字?
- 27. 什么是typeof关键字
- 28. 什么是RCS关键字?
- 29. 为什么你不能在地图文字中使用变量作为键?
- 30. 使用关键字作为ID可以让你的mysql变慢?
这应该被标记为一个坏玩笑。 – Yuck
也许只是一个学生试图把我们的报价之一,他的老师的脸后,他得到了在不清理自己的记忆.. – Blindy
回答问题测试一个坏的标志,并有礼貌。 –