var
obj:tsomeobject;
begin
obj:=tsomeobject.create;
....
obj.free;
....
end;现在另一个地方想判断obj对象是否已经被free,该怎么做?

解决方案 »

  1.   

    if not assigned(obj) then 
               obj.create
      

  2.   

    if Assigned(obj) then
    begin
      //没有free
    end
    else
    begin
      //已经free
    end
      

  3.   

    var
    obj:tsomeobject;
    begin
      if not Assigned(obj) then
        obj:=tsomeobject.create;
      ....
      obj.free;
      ....
    end;
      

  4.   

    大家说的很清楚了阿,我记得以前也用过if obj=nil then ...
      

  5.   

    谢谢大家,但是不对。
    我的object是个线程对象,线程free(freeonterminate=true)后,
    assigned(obj)仍然是true,
    obj仍然<>nil.
      

  6.   

    if obj<>nil then
       obj.free;
      

  7.   

    if obj<>nil then
       obj.free;
      

  8.   

    谢谢大家,但是不对。
    我的object是个线程对象,线程free(freeonterminate=true)后,
    assigned(obj)仍然是true,
    obj仍然<>nil.其实,即使是个一般对象,如TSTRINGLIST,你执行mystr.free后,
    mystr也不是nil。
    assigned(myst) 也仍然是true;
      

  9.   

    1.释放对象的方法:freeandnil(obj)
    2.判断对象是否存在:assigned(obj) 这时应该是false;
      

  10.   

    用freeandnil(obj),然后再if obj<>nil then...
      

  11.   

    非常谢谢大家,但还是不对。
    我的object是个线程对象,线程free(freeonterminate=true)后,
    这里线程对象是自己free的。
    assigned(obj)仍然是true,
    obj仍然<>nil.我怎么办?
      

  12.   

    assiged(obj) //return true
    if not assiged(obj) then  //so return false 
     ..........
      

  13.   

    var
    obj:tsomeobject;
    begin
    obj:=tsomeobject.create;
    ....
    obj.free;
    ....
    end;你这段代码中obj是局部变量,在别的地方是不可见的。
    你要其他地方怎么去判断。
      

  14.   

    var
    obj:tsomeobject;
    begin
    obj:=tsomeobject.create;
    ....
    obj.free;
    obj := nil; //加上这一句
    ....
    end;判断时用:obj <> nil
      

  15.   

    如果存在assiged(obj)返回真,不存在返回假
      

  16.   

    你想不想用个另类的方法啊?
    try
       object.name
    except
       //空值
       end;
      

  17.   

    Use .FreeAndNil
    .Free can not make sure the object is nil.
      

  18.   

    我觉得在你Free 你的Object的时候,把其对象指针设为Nil
    如:Object.Free;
       Object:=Nil;