procedure FreeAndNil(var Obj);
var
  P: TObject;
begin
  P := TObject(Obj);
  TObject(Obj) := nil;
  P.Free;
end;为什么不直接procedure FreeAndNil(var Obj: TObject);
begin
  Obj := nil;
  Obj.Free;
end;呢?

解决方案 »

  1.   

    这是为基类的obj赋值
    TObject(Obj) := nil;
    这是为派生类的obj赋值
    Obj:=nil;
      

  2.   

    Frees an object reference and replaces the reference with nil (Delphi) or NULL (C++).(delhi help)
    释放对象的内容同时将原先指向该对象的指针赋空值。
    若向你写的那样
    obj.free 不会真正释放对象的内容,从而产生内存泄漏。
    建议参考一下delphi中创建一个对象的真正含义。
      

  3.   

    TObject(nil).Free;???这样有意义吗?但你就是这个意思,呵呵
      

  4.   

    这不是我写的代码,是indy的源码。
    hehe 所以我看不懂呀。
    大家继续讨论,我顶!
      

  5.   

    procedure FreeAndNil(var Obj);
    begin
      Obj.free;
      Obj := nil;
    end;一样吗?如果一样为什么还要P,如果不一样请高手说明