delphi对象生存期,接口重新赋值(简单问题)

问题描述 投票:0回答:1

众所周知(???)Delphi 对接口对象的接口引用进行引用计数,并在引用计数降至零时销毁该对象,通常是因为所有相关的接口变量都超出了范围。

假设我使用全局接口变量来引用持久对象:

type 
  tMySyncClass = class(TInterfacedObject,TmyInterface); ...  
  tMyAsyncClass = class(TInterfacedObject,TmyInterface); ...

var MyInterfaceVar : TmyInterface;

procedure MyProc();
begin
  MyInterfaceVar := tMySyncClass.create();
  ....
  MyInterfaceVar := tMyAsyncClass.create();
end

调用

MyProc
后,我有一个
tMyAsyncClass
的实例,带有一个(全局)
MyInterface
引用。

我还有未引用的

MySyncClass
对象吗?重新分配
MyInterfaceVar
是否会触发第一个 (
SyncClass
) 对象的销毁?

delphi interface reference
1个回答
0
投票

是的,重新分配

MyInterfaceVar
变量将删除对
tMySyncClass
对象的引用,减少其引用计数,从而释放该对象,因为它不再有活动引用。

© www.soinside.com 2019 - 2024. All rights reserved.