Wenn wir bezüglich der Destruktoren mal in die Vorfahrenklasse TObject schauen, sieht das folgendermaßen aus:
Delphi-Quellcode:
TObject = class
procedure Free;
destructor Destroy; virtual;
...
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
destructor TObject.Destroy;
begin
end;
Free ist also eine Methode, kein Destructor. Korrekt ist, dass man (so gut wie) immer
.Free
aufrufen sollte und nicht
.Destroy
Destroy ist als virtual deklariert und ist üblicherweise das, was man in seiner abgeleiteten Klasse (sofern nötig) überschreiben kann (wichtig: nicht das override vergessen!)