一个线程terminate后,好像只是free了,并没有把他变成nil。即一个线程A结束后,
执行下面:if A<>nil then showmessage('没有nil')。
于是我想重载线程的destroy
constructor TSound.destroy();
begin
  self:=nil;
  inherited Destroy();
end;
但还是不行,不知道为什么,请高手指教了

解决方案 »

  1.   

    在任何地方写:self:=nil;都是错误的,会引发异常,什么原因就不详细说了。
    对于声明:
    var 
      Obj: TObject;
    后,Obj本身只是一个指针,并不是实例本身。所以Obj.Free只是释放实例空间,而指针的指向不会改变即Obj <> nil。
    只能在类的外部(而不是TSound.destroy等的内部)将Obj指向清零,即Obj := nil 或者FreeAndNil(nil)。————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————