Ich finde Die Nullregel wie auch auf Peter Sommerlads Slides (S. 32) sehr überzeugend.
Obwohl ich mich erinnere, dass es eine strikte Regel gab, dass one hat, um den Destruktor virtuell zu definieren , wenn die Klasse
Der Körper des Destruktors kann sogar leer sein (er benötigt nur den Eintrag in der vtbl).
Ich glaube mich daran zu erinnern, dass wenn die Hierarchie verwendet wird
%Vor% Dann ist es wichtig, dass delete obj
den korrekten Destruktor aufruft . Ist es richtig, dass, wenn ich die Destruktordefinition vollständig auslasse, würde nicht virtuell werden , und daher würde der falsche d'or genannt werden?
Das führt mich zu meiner letzten Frage:
Bearbeiten: Wie ich in einer Antwort erinnert wurde, hatte meine 1sr-Version der Frage die falschen Annahmen. Der relevante (virtuelle) Destruktor ist in Base
, nicht Derived
. Aber meine Frage lautet: Muss ich (virtuelle) Destruktoren überhaupt deklarieren?
Es ist eigentlich der Basisdestruktor, der als virtuell deklariert werden muss und in abgeleiteten Klassen automatisch virtuell ist:
%Vor%Aber ansonsten gilt immer noch die Regel von Null.
Wenn Sie es so machen, wie Sie es getan haben, oder wenn Sie den% destructor virtual
weglassen, erhalten Sie einfach undefiniertes Verhalten, wenn delete
eines abgeleiteten Objekts durch einen Basiszeiger verändert.
Tags und Links c++ c++11 destructor virtual-destructor rule-of-zero