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

use*_*094 12 delphi

我想知道为什么我们在关闭应用程序时要破坏某些内容时使用"终结"?没有关闭应用程序没有调用直接释放所有对象.Free?

谢谢.

Dav*_*nan 19

关闭应用程序是否直接释放所有对象而不调用Free

没有.Delphi类实例不是垃圾收集的,因此需要手动销毁它们.

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

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

如果您知道您的代码只在可执行文件中运行,那么Free在最终确定时不要让对象感到自由.请注意,如果您使用的是内存泄漏检测工具,那么这样做会导致您故意泄露的对象被视为内存泄漏.通过电话处理RegisterExpectedMemoryLeak.

最后要说的是,对象的析构函数有时不仅仅是释放内存.例如,有时它可以将值保存到设置文件或注册表中.当然,您不希望省略为此类对象运行析构函数.

  • 无需阅读!你上面的描述是足够和完美的...非常感谢你!:d (2认同)

dum*_*uch 5

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