如果在Destroy函数中途退出(第一句代码就是退出)destructor destroy();
begin
  if {某条件} then exit;  //.........
end;
那这个对象还能不能使用?

解决方案 »

  1.   

    加上继承父类的INHER就可以了
      

  2.   

    仍然可以使用。如
    if working then 
      Exit
    else
      inherited Destroy
    这样写是可以的。
      

  3.   

    那是不是说我可以在destroy函数中加入引用计数的判断?例如变量a,b位于不同的函数,但同时指向同一个对象,则:a.Free; 
    //此时,b 仍然可以使用......在程序的另一个位置(不在同一个对象或函数中)
    b.Free;
    //现在才真正释放了对象请问,我上面所想的正不正确?
      

  4.   

    to King_Dragon(我是谁):
    我是想做一个有引用计数功能的类,不知有没有什么好建议
      

  5.   

    你可以用class function来实现啊!
      

  6.   

    to eulb(执子之手,与子偕老) :
    如何实现?能否给出简单例子?
      

  7.   

    建议参阅
    Delphi6 Help -> 
      Object Pascal Reference ->
        Classes and objects -> 
          Class references -> 
            Class methods
      

  8.   

    to cnsuyong(小可):
    我并不是不知道怎样写类方法,而是不知道如何实现一个有引用计数功能的类比较好。请看清问题。谢谢。
      

  9.   

    前面已经有朋友评论你的想法比较怪异。我也苟同。
    如果你真的要实现类似引用计数的功能,则应该在其他的成员中设置条件判断(满足销毁条件时就调用析构器,否则不调用),而不要在析构器中判断就行了。前面有人建议使用class function目的大概也在此列。析构器自TObject继承而来,其根本作用就是要销毁实例对象。试问,你是否还考虑在构造器Create中添加Exit以达到不创建的目的?这根本不是一个技术问题,而是一个程序结构逻辑思维方式的问题。Inprise提供有关长串的阐述可以作为佐证:当引用计数为0时则释放相关内存。而并不是“当释放相关内存而发现引用计数大于0时则撤消释放操作。”搞清楚这两个逻辑,你的问题也就迎刃而解了。
      

  10.   

    to cnsuyong(小可) :
    谢谢小可的耐心指导。
    其实,你说的这些我都已经考虑过,这是我想做一个有引用计数的Singleton ,Client端调用时无需知道它是有引用计数的,只需用完以后和普通类一样Free 即可,就是说内部的实现对调用者是透明的。所以才有今天的问题。还请各位高手多多发言讨论一下这个问题。小可,你有msn帐号吗?我们可以用它多加交流。
    我的:[email protected]