zoukankan      html  css  js  c++  java
  • 用接口关联对象的生命周期(二)

    //接上次讨论

    //测试代码如下

    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,但是这样是不可控制的

  • 相关阅读:
    scrapy模拟用户登录
    我为什么选择Vim
    关于72键配列键盘的想法
    vim配图
    解决一些python的问题记录
    ros资料记录,详细阅读
    C语言的历史
    将制定目录家到系统PATH环境变量中
    让vim更加智能化
    如何自定义路径
  • 原文地址:https://www.cnblogs.com/DKSoft/p/2031464.html
Copyright © 2011-2022 走看看