Destruktoren
-
Ich habe einige eher technische Fragen. Angenommen ich habe eine pure virtual base class Foo und eine von Foo abgeleitete, instantiierbare Klasse Bar. Foo hat keine Datenmember und Bar hat nur statische Datenmember. Der Destruktor von Foo ist virtual ~Foo() {}, der Destruktor von Bar ist nicht definiert (default generated).
Frage 1: Was macht der Destruktor von Bar?
Frage 2: Kann es ein memory leak geben, wenn Bars Destruktor nicht aufgerufen wird?
Frage 3 (generalisert Frage 2): Muss der Destruktor von Bar aufgerufen werden, damit das Programm definiertes Verhalten hat?Cody!
-
- Nichts (= das was ~Foo macht).
- Nein. Allerdings wenn der Destruktor nicht aufgerufen wird heißt das meistens auch, dass operator delete nicht aufgerufen wird fals nötig was ein Speicherloch wäre.
- Ja. Es gibt ein paar Ausnahmen allerdings am einfachsten kann man sagen : Jedes Objekt muss zerstört werden. Damit ist man immer richtig.
-
zu 1.) Nicht ganz nichts. Er zerstört alle Member von Bar (wenn auch implizit).
zu 2. und 3.) Wenn der Destruktor von Foo virtual ist, werden immer alle Destruktoren der Vererbungshierarchie in der korrekten Reihenfolge aufgerufen.
-
LordJaxom schrieb:
zu 1.) Nicht ganz nichts. Er zerstört alle Member von Bar (wenn auch implizit).
Ich hatte es so gelesen, dass auch Bar keine Member hat. Wenn Bar Member hat dann hast du natürlich recht.
-
LordJaxom schrieb:
Er zerstört alle Member von Bar
Bar hat nur statische Datenelemente, diese werden also beim Destruktoraufruf nicht zerstört

Es sei den du beziehst das aufs allgemeine und nicht auf die Klasse von Cody!
