var
   obj: IAxInterface;
...  obj:= CoAxInterface.Create; 或 obj:= IAxInterface(CreateOleObject('...'));写了一阵子程序,一直都是 用obj:= nil;来处理的 程序跑是没问题, 但是觉得应该在浪费资源, 是不是这样的?应该怎么释放?ps; 题目用"析构"大概不确切:)

解决方案 »

  1.   

    obj:= nil;
    它使得对象的引用计数为0,这样之后对象确实会被立即释放的.
    所有COM对象里面都会维护一个引用计数,当引用为0时,对象被释放.
      

  2.   

    一般ActiveX控件都有引用计数,会自动释放。
      

  3.   

    对于接口是通过引用计数来维持生命周期的,当一个接口的引用计数为零会自动调用析构函数,obj=nil这一句的目的在于让接口的引用计数减一,如果obj属于局部变量你不写这一句也可以,当obj离开作用域编译器会自动让obj指向的接口引用计数减一
      

  4.   

    在COM中,借口说白啦只是指针而已,你将它 NIL ,自然就释放拉
      

  5.   

    其实任何地方INTERFACE都是一个指针而已,指向实现类的具体方法。。