Warum gibt der folgende Code beim Kompilieren mit gcc 4.7.2 und MSVC-11.0 eine andere Ausgabe?
%Vor%gcc 4.7.2
Basis :: Base ()
Abgeleitet :: Abgeleitet ()
Basis :: ~ Basis ()
Abgeleitet :: ~ Abgeleitet ()
Basis :: ~ Basis ()
MSVC-11.0
Basis :: Base ()
Abgeleitet :: Abgeleitet ()
Basis :: ~ Basis ()
Basis :: ~ Basis ()
Warum druckt MSVC-11.0 das zweite Derived::~Derived()
nicht?
Ich benutze MS Visual Studio 11.0.60315.01, cl Version 17.0.60315.1.
Verwenden Sie dies als main
und setzen einen Haltepunkt auf der return 0
-Zeile Ich bekomme diese Ausgabe:
welches ist das in der Frage berichtete.
Das Herausnehmen von main
und in den crt resultiert in dieser Ausgabe:
Dies der Klasse Base
hinzufügen:
führt zu dieser Ausgabe bei return 0;
und diese Ausgabe, nachdem alle Destruktoren ausgeführt wurden:
%Vor%Das Hinzufügen eines virtuellen Destruktors führt zu keinen Änderungen (wie erwartet):
%Vor%Ich vermute, dass die Ausgabe von MSVC vom Poster falsch aufgezeichnet wird.
BEARBEITEN:
Die vollständige Ausgabe (ohne den Kopierkonstruktor) enthält 3 Base
destructors. Das Hinzufügen des Kopierkonstruktors reduziert das auf 2 Base
destructors.
Das Verhalten ohne den Kopierkonstruktor entspricht der Ausgabe von:
%Vor%Tags und Links c++