var vObjectList:TObjectList;
    vObject:TObject;
begin
   vObject:=TObject.create;
   vObjectList.add(vObject);
   .
   .
   .
   .
   //如果此时vObject已经释放掉了
   vObjectList.delete(0);   //执行此句会出错
      //请问如何判断 vObjectList.Items[0] 已经被释放了end;

解决方案 »

  1.   

    if vObjectList.Items[0]=nil then
      

  2.   

    vObject 释放时用 FreeAndNil(vObject);
    然后结合 liangyong007a 的判断。
      

  3.   

    如果vObject 这个对象的类中的析构函数怎样做到呢。
    我重载了这个对象的双击事件,在里面进行的释放,这时候应该怎么做?应该则样判断?
      

  4.   

    要让vObject这个实例得到它自己的对象指针,那就只有在建立之后将vObject的值传递给它自己,可以用一个public的变量来保存,当前实例在释放自己后就将当前对象指针置成nil。假设这个对象这样定义:type
      PNewObject = ^TNewObject;
      TNewObject = class
        destructor Destroy; override;
      private
      public
        This: PNewObject; // 存放指向当前实例的指针
      end;...destructor TNewObject.Destroy;
    begin
      if Assigned(This) then This^ := nil;
      inherited;
    end;那么使用对象的代码可以这样写:procedure TForm1.FormCreate(Sender: TObject);
    var
      NewObj: TNewObject;
    begin
      NewObj := TNewObject.Create;
      NewObj.This := @NewObj;        // 传递对象指针
      NewObj.Free;
      Assert(not Assigned(NewObj));  // 断言NewObj在Free后为nil。
    end;