首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们在单位中使用Finalization?

为什么我们在单位中使用Finalization?
EN

Stack Overflow用户
提问于 2012-08-01 17:24:26
回答 2查看 1.5K关注 0票数 12

我想知道,如果我们想在关闭应用程序时销毁一些东西,为什么要使用"Finalization“?关闭应用程序不是在不调用.Free的情况下直接释放所有对象吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-01 17:28:45

在不调用Free的情况下,关闭应用程序不会直接释放所有对象吗?

不是的。Delphi类实例不是垃圾回收的,因此需要手动销毁。

但是,如果您谈论的是一个可执行进程,那么完全可以接受不处理某些对象,因为当进程终止时,操作系统将重新获得该进程拥有的所有资源。因此,即使Delphi析构函数不运行,当进程终止时,操作系统也会清理一切。进程一旦终止,就不可能泄漏任何系统资源。

请注意,如果单元包含在DLL或包中,则在完成时未销毁所有对象将导致内存泄漏,如果该DLL被重复加载和卸载到单个进程中。

如果您知道您的代码只在可执行文件中运行,那么您可以在终结化时随意不使用Free对象。请注意,如果您使用的是内存泄漏检测工具,那么这样做将导致故意泄漏的对象被视为内存泄漏。通过调用RegisterExpectedMemoryLeak来处理这个问题。

最后要说明的一点是,对象的析构函数有时不仅仅是释放内存。例如,有时它可以将值保存到设置文件或注册表中。自然,您不会想要省略为这样一个对象运行析构函数。

票数 19
EN

Stack Overflow用户

发布于 2012-08-02 15:33:36

David Hefferman回答的最后一点是:可能还有其他资源需要正确释放,比如生成校验和的文件处理程序,或者连接到PC的一些硬件必须处于特定状态(例如,要关闭的激光器,这就是我目前正在使用的)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11756321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档