type
   Tabc=class
   public
    constructor Create;
    Destructor Destroy;
end;
constructor Tabc.Create;
begin
  ....
  ....
  ....
end;
Destructor Tabc.Destroy;
begin
   inherited;
end;
执行以下代码 
var
 temp:Tabc;
begin
 temp:=Tabc.create;
 temp.free;
end;发现temp并没有执行Tabc.Destroy;请问自定义的类是不是释放的时候一定要调用  Tabc.Destroy而不能使用free?

解决方案 »

  1.   

    你这样写隐藏了基类的析构函数
    析构函数要标注override,在TObject基类中的已经定义有析构函数,它是个虚函数
    你要这样 tabc= class
     Destructor Destroy;override;
     .... 
      

  2.   

    你不能跳过OO基础,太浪费时间。回头找本书认真耐心学习下面向对象的内容。
    推荐《C++ 编程思想》《java编程思想》、《delphi面向对象编程思想》,前两本虽然不是delphi为底的书,但是面向对象的内容都是一样的。
      

  3.   

    free方法是vcl基类Tobject中定义的,源码中
    procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy; // 在虚函数表中查询调用对应对象的destroy
    end;你也可以在Tabc类中定义并实现一个free函数
    type
       Tabc=class
       public
        Destructor Destroy; // 隐藏掉基类的析构函数
        procedure Free; // 定义一个Tabc对象自己的free函数
    end;

    procedure Tabc.Free;
    begin
      Destroy;
    end;destructor Tabc.Destroy;
    begin
      ShowMessage('Tabc Destroy');
    end;
      

  4.   

    谢谢,我的delphi都是东拼西凑学的。