用接口关联对象的生命周期(二)

简介: //接上次讨论 //测试代码如下 procedure TForm1.btnRaiseTestClick(Sender: TObject); var   lvIntf2: ITest;   lvVIList: TVIList; begin   lvVIList := TVIList.

//接上次讨论

//测试代码如下

procedure TForm1.btnRaiseTestClick(Sender: TObject);
var
  lvIntf2: ITest;
  lvVIList: TVIList;
begin
  lvVIList := TVIList.Create(false); //不使用List管理接口对象生命周期
  try

    //+1
    lvVIList.Add('abc', TTestIntfObject.Create);

    //+1 +1
    lvIntf2 := (lvVIList.GetInterfaceByKey('abc') as ITest);
    lvIntf2.DoWork;
    raise Exception.Create('raise error');
  finally
    //-1
    lvVIList.Remove('abc');
    lvVIList.Free;
  end;
end;

//经过上次讨论局部的接口变量在函数执行完毕时会进行隐含如下赋值

lvIntf2:=nil;

lvTempIntf:=nil;  //lvTempIntf为假想的接口是一个IInterface类型。因为 as会产生一个临时的接口

//经过上上述代码跟踪测试即使raise后,局部接口变量仍然会得到隐含的赋值

//但是对象不会隐含执行lvVIList.Free,可能也执行了lvVIList:=nil;(无法证实,猜想),在整个应用程

//序退出的时候会执行Free,但是这样是不可控制的

目录
相关文章
|
6月前
|
XML Java 数据格式
SpringBean的生命周期
SpringBean的生命周期
65 0
|
3月前
NettyHandler 常用生命周期方法
NettyHandler 常用生命周期方法
29 0
|
6月前
将生命周期方法添加到类中
将生命周期方法添加到类中
|
安全 编译器 程序员
25 C++ - 动态对象创建
25 C++ - 动态对象创建
46 0
|
设计模式 Java 开发者
Spring框架中JavaBean的生命周期及单例模式与多列模式
Spring框架中JavaBean的生命周期及单例模式与多列模式
131 0
|
XML Java 数据格式
SpringBean生命周期
SpringBean生命周期
|
存储 安全 Java
|
XML 缓存 Java
SpringBean(配置、实例化、作用域、生命周期、装配方式)
SpringBean(配置、实例化、作用域、生命周期、装配方式)
165 0
SpringBean(配置、实例化、作用域、生命周期、装配方式)
|
Java 开发者 容器
对象生命周期|学习笔记
快速学习对象生命周期
对象生命周期|学习笔记
|
Java Spring 容器
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
119 0