Alle Delphi-Klassen stammen von TObject ab. Das TObject bringt sowohl den Standard-Konstruktor
Create()
als auch den Standard-Destruktor
Destroy()
mit.
Wenn du einen eigenen Destruktor hast, dann solltest du auch wirklich immer ein
inherited
drin haben. Ja, wenn man seine Klasse direkt von
TObject
ableitet könnte man es sich sparen. Aber warum nicht? Angenommen deine Klasse
TMySpecialization
hat sich ursprünglich nicht von TMyBase abgeleitet, jetzt aber schon. Und du hättest in deinem Destruktor von
TMySpecialization
das
inherited
nicht drin gehabt. Dann hättest du jetzt ein Speicherleck (oder eventuell schlimmeres) da der Destruktor von
TMyBase
(und allem darüber) nicht mehr ausgeführt würde.
Delphi-Quellcode:
type
TMyBase = class // man könnte ebenso schreiben "TMyBase = class(TObject)"
private var
someStuff: TObject;
public
constructor Create();
destructor Destroy(); override;
end;
TMySpecialization = class(TMyBase)
public
constructor Create();
destructor Destroy(); override;
end;
{ TMySpecialization }
constructor TMySpecialization.Create();
begin
inherited; // sowas von überhaupt nicht überflüssig
// (...)
end;
destructor TMySpecialization.Destroy();
begin
// (...)
inherited; // sowas von überhaupt nicht überflüssig
end;
{ TMyBase }
constructor TMyBase.Create();
begin
inherited; // streng genommen überflüssig, aber warum nicht?
someStuff := TObject.Create();
end;
destructor TMyBase.Destroy();
begin
someStuff.Free();
inherited; // GANZ streng genommen überflüssig, aber warum nicht?
end;