AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Klasse in einer Klasse Destruktor

Ein Thema von kagi3624 · begonnen am 7. Mai 2020 · letzter Beitrag vom 7. Mai 2020
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.992 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Klasse in einer Klasse Destruktor

  Alt 7. Mai 2020, 09:59
Moooment: versuch einmal, eine Variable vom Typ TMyBase zu deklarieren und ihr eine Instanz von TMySpecialization zuzuweisen. Was geschieht dann mit dem Konstruktor von TMySpecialization (Haltepunkt)?
Delphi-Quellcode:
procedure WhatKnowThenI;
var
  SomeInstance: TMyBase;
begin
  SomeInstance := TMySpecialization.Create;
  SomeInstance.Free;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.861 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Klasse in einer Klasse Destruktor

  Alt 7. Mai 2020, 11:13
Zitat:
Delphi-Quellcode:
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;
Überflüssig ist da garnichts.

Wenn du jetzt mit absoluter Sicherheit sagen kannst, dass jetzt und auch in zukunft in den Methoden des Vorfahren niemals Code sein wird, dann ist es "unnötig".
Wenn nicht, dann sollte man es besser immer einfügen.

Wenn es "gerade jetzt" nicht benötigt wird, weil es keine gleichnamige Methode im Vorfahren gibt, dann lässt der Compiler das inherited im Kompilat weg.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
803 Beiträge
 
#13

AW: Klasse in einer Klasse Destruktor

  Alt 7. Mai 2020, 13:38
Ganz genau. Der Destruktor wird auch immer ausgeführt, auch wenn der Konstruktor scheiterte, z.B. eine Exception auftritt.
Ich habe aber gerade gesehen, dass mein destructor nicht (explicit) ? aufgerufen wird, wenn ich nur Foo.Free; habe. Erst wenn ich ein override; hinter dem Destructor habe, wird dieser mit Free aufgerufen.
Ich mach das immer so, dass ich bereits beim erstellen der Destructor-Methode mit dem Code-Insight arbeite. Einfach zwischen TFoo=class und end; STRG+Leertaste, Exec eingeben, dann steht das schon Execute, und mit Enter bestätigen. Code-Insight erstellt die Destuctor-Methode gleich korrekt und legt auch den Public-Abschnitt gleich mit an, wenn nötig.
Spart Zeit und man kann das unscheinbare override nicht vergessen (passierte mir früher regelmäßig).

Übrigens: mit Shift+CTRL+C wird werden auch die Methoden gleich im Implementation-Abschnitt erstellt.

Leider klappt das mit dem Constructor nicht ganz so komfortabel.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 7. Mai 2020 um 13:41 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf