virtual Destructor
-
Ich habe gerade gelesen, dass bei dem Code
Base* base = new IrgendEineVonBaseAbgeleiteteKlasse(); delete base;nur der Destructor von Base aufgerufen wird, nicht aber der von "IrgendEineVonBaseAbgeleiteteKlasse". Darum soll man deren Destructor als virtual deklarieren.
Verstehe ich das also richtig, dass wenn alle Klassen meiner Library von einer gemeinsamen Klasse "Base" abgeleitet sind die virtuelle Funktionen besitzt damit alle davon abgeleiteten Klassen virtuelle Destructoren haben müssen?
-
Ja.
Aber "virtual" brauchste nur vor den Basisklassendestruktor zu schreiben, dadurch sind die Destruktoren der Erben automatisch auch virtuell.
-
StellerFragen schrieb:
Verstehe ich das also richtig, dass wenn alle Klassen meiner Library von einer gemeinsamen Klasse "Base" abgeleitet sind die virtuelle Funktionen besitzt damit alle davon abgeleiteten Klassen virtuelle Destructoren haben müssen?
Zuerst mal muss die Basisklasse einen virtuellen Destruktor haben! Danach siehe Post von Volkard.
-
Ich würde allerdings wie bei allen virtuellen Funktionen das
virtualimmer davor schreiben. Im nächsten Standard gibts zudemoverride...
-
volkard schrieb:
Ja.
Aber "virtual" brauchste nur vor den Basisklassendestruktor zu schreiben, dadurch sind die Destruktoren der Erben automatisch auch virtuell.Achso, gilt das das dann auch für alle anderen Funktionen wenn ich diese als virtual deklariere. Ist also
class Base { virtual void Function(); }; class Derived : public Base { virtual void Function(); };das gleiche wie
class Base { virtual void Function(); }; class Derived : public Base { void Function(); };
-
Ja. Ich schreibe virtual aber dennoch hin, da ich es übersichtlicher finde.