当没有更多的引用时,接口实现形式是否会自行释放?

Ali*_*ter 6 delphi interface tform

如果我在一个表单上实现一个接口,TMyForm = class(TForm, IMyInterface)当没有更多的接口引用时,该对象是否会自行释放?似乎没有,虽然我无法弄清楚如何计算TForm(如果有的话).当接口引用超出范围时,我担心表单被释放,但这似乎不会发生.

我想这个问题有两个部分,首先是一个表单是否可能意外释放(真正的问题),其次是表单是如何计算引用的.

Uwe*_*abe 13

TForm派生自TComponent,实现_AddRef()_Release()禁用对自身的引用计数.因此,任何TComponent后代类实现的任何接口,例如TForm,TComponent在释放接口时都不会释放其实现对象.

但是,如果IVCLComObject为该TComponent.VCLCOMObject属性分配了接口,则会TComponent将引用计数委托给该对象,以便在其引用计数降为0(TComponent不增加其引用的引用计数)时释放该对象IVCLCOMObject.

这对所有后代都有效TComponent,除非他们通过覆盖_AddRef()_Release()手动实现自己的任何引用计数.

  • 换句话说:只要你不以某种方式通过COM服务器暴露你的表单,其中引用计数似乎足够,没有你自己干预的东西设置VCLComObject的可能性很小. (2认同)