Frage zu virtual



  • Warum sollte man einen Destruktor auch virtual deklarieren, wenn mann virtuelle Funktionen in einer Klasse hat?

    😕



  • Morgen!

    lies mal hier nach, da stehts mit beispiel erklärt 🙂



  • Aus dem Text des geposteten Links:

    Wird über diesen ein delete ausgeführt, würden bei einem nicht virtuellem Destruktor nur die Bestandteile des Bass, aber nicht der Tuba angesprochen. In diesem einfachen Beispiel ist das nicht relevant. Würde die Tuba aber gesonderte Speicherbereiche brauchen, dann würde diese über einen nichtvirtuellen Destruktor nicht aufgelouml;st.

    Das ist gängiges Verhalten vieler Compiler. Es ist aber nicht garantiert. Vielmehr führt das Löschen eines abgeleiteten Objekts über eine Basisklassenreferenz zu *undefiniertem* Verhalten, falls die Basisklasse über keinen virtuellen Destruktor verfügt.

    Undefiniert kann alles bedeuten. Von sofortiger Absturz bis macht genau das, was der Programmierer will. Auf jeden Fall ist es düster dort wo undefiniertes Verhalten regiert. Und düster ist beim Programmieren selten gut.



  • OK. Danke! Ich glaub ich habs.


Anmelden zum Antworten