delphi - 为什么我们要使用最终确定单位?

标签 delphi

我想知道如果我们想在关闭应用程序时销毁某些东西,为什么要使用“最终化”?关闭应用程序不会直接释放所有对象而不调用 .Free 吗?

谢谢。

最佳答案

Doesn't closing the application frees all objects directly without calling Free?

没有。 Delphi 类实例不会被垃圾回收,因此需要手动销毁。

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

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

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

最后要指出的一点是,对象的析构函数有时不仅仅是释放内存。有时,它可以将值保存到设置文件或注册表中。当然,您不想省略对此类对象运行析构函数。

关于delphi - 为什么我们要使用最终确定单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756321/

相关文章:

delphi - 在Delphi 6中继续吗?

delphi - 如何在 Delphi 中调试从 DLL 调用的 DLL

delphi - 未找到 RTL150.BPL

delphi - 如何使用 Inno Setup 将 Path 转换为 8.3 格式

oracle - 使用 Delphi 数据感知组件 - 优点和缺点

delphi - 如何在delphi中编写mongodb代码

delphi - Delphi 文档查看器中的行为

javascript - 如何使用来自 Delphi 的 Google Chrome 浏览器的 V8 JavaScript 解释器?

delphi - TStringGrid 输入验证仅允许 C++ Builder XE8 上的数字、小数和逗号

delphi - 使用 Delphi 在网格面板中移动控件