Ich danke euch beiden. Verstehe es aber trotzdem nicht ganz: FreeAndNil
setzt die Referenz auf nil und ruft dann Free
auf. Wieso muss der Compiler dann mein (?) FreeAndNil
kennen?
Du hast ja Free nicht überschrieben (weil unmöglich - überschreiben geht ja nur bei virtuellen Methoden)
Wenn du dir FreeAndNil anguckst, steht da:
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
D.h. .Free wird auf eine Variable von Typ TObject aufgerufen. Und das ist OK, denn TObject is ja hinreichend.
Nur ohne das override wird hier auch immer TObject.Free aufgerufen. Nur bei virtuellen Methoden wird hier nachgeuckt, ob die Methode überschrieben wurde.