rein virtulle Destruktoren



  • arghonaut schrieb:

    Ich versteh da auch den Sinn gar nicht. Eine pure-virtual-Funktion sorgt dafür, dass Instanzen dieser Klasse nicht möglich sind, und vor allem, dass in abgeleiteten Klassen diese Funktion implementiert werden muss (oder als pure-virtual weitergereicht). Welchen Sinn macht es jetzt, in einer Basisklasse festzulegen, dass abgeleitete Klassen den Destruktor implementieren müssen? Und wenn es nur um die Instanziierung geht, warum nicht eine normale pure-virtual-Funktion nehmen? Wenn das keinen Sinn macht, was ist der Hintergrund, warum du Instanzen verbieten willst?

    @arghonaut: Angenommen du willst eine Basisklasse ohne Methoden als Basis fuer eine Vererbungshierarchie (Sinnhaftigkeit hinten angestellt). Jetzt sollen alle abgeleiteten Klassen einen eigenen Destruktor implementieren. Mit pure virtual wird das erzwungen. Wenn ein Objekt zerstoert wird, werden nun alle Basisklassendestruktoren in entsprechender Reihenfolge aufgerufen, auch der Wurzelklasse fuer den Ableitungsbaum. Besitzt diese Klasse keine Implementation des Destruktors kommt es zu einem Laufzeitfehler.



  • Hast du ein Beispiel parat, in dem es essentiell ist, dass ein eigener Destruktor implementiert wird? Wenn halt selber nichts zu zerstören ist - also der vom Compiler generierte Destruktor vollkommen ausreicht - welchen Sinn macht es, diesen dann trotzdem implementieren zu müssen? Es würde doch deutlich mehr Sinn machen, in Base einen leeren virtuellen Destruktor anzubieten.



  • Der Laufzeitfehler heißt dann "pure virtual function call(ed)". Eine Erklärung dafür gibt es bei http://www.artima.com/cppsource/pure_virtual.html



  • arghonaut schrieb:

    Hast du ein Beispiel parat, in dem es essentiell ist ...

    Nichts ist essenziell. NUr essen, trinken, sterben. Dumme Frage! Auch habe ich die Sinnhaftigkeit hinten angestellt. ... Ich korrigiere mich. Ziel ist es nicht, die Implementation des Destruktors zu erzwingen, sonder die Basisklasse abstrakt zu machen. Wenn die Basiskalsse abstrakt sein soll, ohne weitere Funktionalitaet, dann ist das ein Weg.


Anmelden zum Antworten