C++ Destruktor von Basisklassen immer virtual halten?

Abcd12345

Lt. Junior Grade
Registriert
März 2006
Beiträge
483
Hi,

Mich beschäftigt die Frage ob ich den Destruktor immer Virtual halten muss oder nur dann, wenn ich ich Instanzen auf dem Heap erzeugen will.

Ich habe nämlich jetzt eine Mutterklasse dessen Tocherklassen "ich hoffe man kann das so ausdrücken und verstehen" nur innerhalb einem von einer Klasse begrenzten Bereich gültig sein sollen. Sprich ich muss sie nicht auf dem Heap erzeugen und werde dies aus Gründen der Einfachheit auch nicht tun.

Wenn ich jetzt den Gültigkeitsbreich der Instanzen verlasse wird ja nur der Destruktor der Mutterklasse aufgerufen und nicht der, der Tochterklasse. Ist dies unerheblich oder erzeuge ich so Memoryleaks obwohl die Instanzen nicht auf dem Heap erzeugt wurden?
 
Solange du das delete nicht auf Basisklassenzeiger die auf eine Instanz der abgeleiteten Klasse zeigen anwendest sollte das keine Probleme geben.

Aber warum der Geiz, mach den Destruktor von Basisklassen immer virtuell und die Sache ist erledigt (was sich spätestens dann auszahlt wenn du die Klasse später doch mal so verwendest, dass es Probleme geben könnte).
 
Joar, hab ich jetzt auch gemacht ;)

Es geht/ging mir halt einfach um die Hintergründe. Mir ist aber auch grade aufgefallen, dass Funktionen bei Instanzen, die man ohne "new" schafft, ja alle Funktionen überschrieben werden ohne das man Virtual verwendet, also sollte es erst recht unproblemtaisch sein keine virtuellen Funktionen zu verwenden.

Naja ich werde denoch alle Basisklassen Virtuel halten so viel Aufwand ist es ja nicht und man geht auf nummer sicher :)

Eine Frage noch:

Wie kann man eigentlich Klassen, die von einer Basisklasse abstammen, bezeichnen?
 
Du brauchst den Destruktor auch nicht virtuell zu machen, wenn er in der Basisklasse protected ist. Dann kann ein Objekt der Klasse eh nicht über einen Basisklassenzeiger zerstört werden und das virtual wäre überflüssig.

Wenn du die Klasse nicht auf dem Heap erstellst, ist die most derived class ja sowieso immer statisch bekannt, also kann auch immer der korrekte Destruktor aufgerufen werden.

Edith: Als Daumenregel kannst du eigentlich immer sagen - wenn die Klasse dafür designt ist, öffentlich von ihr abzuleiten, dann mach den Destruktor entweder virtuell oder protected.
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
8
Aufrufe
1.579
Zurück
Oben