Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.111 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Klasse in einer Klasse Destruktor

  Alt 7. Mai 2020, 09:13
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;

Geändert von Der schöne Günther ( 7. Mai 2020 um 09:15 Uhr)
  Mit Zitat antworten Zitat