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 virtual immer davor schreiben. Im nächsten Standard gibts zudem override ...



  • 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.


Anmelden zum Antworten