Virtuelle Destruktoren



  • Angenommen, ich habe eine Klasse Object, von der alle relevanten Klassen erben. Object definiert einen virtuellen Destruktor. Wenn ich die Destruktoren der abgeleiteten Klassen nicht definiere, sind die dann auch virtuell?

    Ich habe mal nen Haltepunkt in ~Object gesetzt und erhalte folgenden Call Stack, wenn ich ein Building lösche.:

    Object::~Object()
    Structure::~Structure()
    Building::~Building()

    Sieht also so aus, als hätte Building auch einen virtuellen Destruktor bekommen und der hätte den ebenfalls virtuellen Destruktor von Structure (die ich beide nicht definiert habe!) aufgerufen.
    Reicht es also, wenn ich nur in der obersten Basisklasse nen virtuellen Destruktor definiere?



  • Hallo,

    im Ansi Draft steht dazu:

    If a class has a base class with a virtual destructor, its destructor
    (whether user- or implicitly- declared) is virtual.

    denke das muss man nicht weiter uebersetzen 🙂

    mfg
    v R



  • Ok, das ist praktisch. 😃



  • Kleine Anmerkung: Das gilt nicht nur für Destruktoren sondern für ALLE Methoden.



  • Noch praktischer. 😃 😉



  • interpreter: Das ist zwar nicht falsch, ist aber irreführend, da Destruktoren nicht vererbt werden. Man kann also nicht aus dem Verhalten virtueller normaler Memberfunktionen das Verhalten virtueller Destruktoren ableiten.
    </nitpick>


Anmelden zum Antworten