我想知道为什么我们使用"最终确定"如果我们想在关闭应用程序时破坏某些东西?不关闭应用程序直接释放所有对象而不调用.Free?
感谢。
答案 0 :(得分:19)
关闭应用程序是否在不调用
Free
的情况下直接释放所有对象?
没有。 Delphi类实例不是垃圾收集的,因此需要手动销毁它们。
但是,如果您正在讨论可执行流程,那么不处理某些对象是完全可以接受的,因为当该流程终止时,操作系统将重新声明流程拥有的所有资源。因此,即使Delphi析构函数不运行,操作系统也会在进程终止时整理所有内容。一旦进程终止,进程就无法泄漏任何系统资源。
请注意,如果单元包含在DLL或包中,那么在最终确定时无法销毁所有对象将导致内存泄漏,如果该DLL被重复加载并卸载到单个进程中。
如果您知道您的代码只在可执行文件中运行,那么在完成时感觉自由不要Free
个对象。请注意,如果您使用的是内存泄漏检测工具,那么这样做会导致您故意泄露的对象被视为内存泄漏。通过致电RegisterExpectedMemoryLeak
来解决这个问题。
要做的最后一点是,对象的析构函数有时不仅仅是自由内存。例如,有时它可以将值保存到设置文件或注册表中。当然,您不希望省略为这样的对象运行析构函数。