TKKK = class(TObject)
  private
    FK: Integer;
    procedure SetK(const Value: Integer);
  public
    property K: Integer read FK write SetK;
  end;  TForm1 = class(TForm)
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
  private
    F1, F2: TKKK;
  public  end;implementation{$R *.dfm}procedure TKKK.SetK(const Value: Integer);
begin
  FK := Value;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
  F1 := TKKK.Create;
  F2 := F1;
  F1.Free;
  F1 := nil;
  if 如何判断F2现在已经释放 then
    F2.K := 10;
end;

解决方案 »

  1.   

    像你这样的代码肯定通过f2访问的东西是非法的!
    因为f1,f2都是指针,并且指向相同地址,f1对应的对象内存free了,f2指向的就是那个对象死尸!当然不能用!如果你的测试代码改一下,那么检测一个object是否free过就try一下调用此object的函数,有异常就很可能是free过了,但不一定异常不是合法函数内部触发的。没啥好办法。
      

  2.   

    把访问代码方在异常中,如果是free后的对象,会产生访问异常的
      

  3.   

    Re:stanely(俺是邢她汉子)
    是的,有异常就很可能是free过了,但不一定异常不是合法函数内部触发的。
    所以还是没啥好办法。
    如果有办法将所有引用过该对象的指针都赋空也不错呀。
      

  4.   

    在delphi中free后的对象还不是一个空指针,但他指向的内容是无效的,因此最好使用freeandnil来释放对象,或者自己在调用free后把对象赋值为nil。这样你可以检查一个对象是否为nil来判断它是否有效了。在李维的书里对象的释放都是这么干的。
      

  5.   

    没有办法,TRY 一下。
    对象赋值的代价。