Übergabe nach Wert und unterschiedlichem Verhalten

8

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?

Ссылка

    
FrozenHeart 31.05.2013, 15:48
quelle

1 Antwort

1

Ich benutze MS Visual Studio 11.0.60315.01, cl Version 17.0.60315.1.

Verwenden Sie dies als main

%Vor%

und setzen einen Haltepunkt auf der return 0 -Zeile Ich bekomme diese Ausgabe:

%Vor%

welches ist das in der Frage berichtete.

Das Herausnehmen von main und in den crt resultiert in dieser Ausgabe:

%Vor%

Dies der Klasse Base hinzufügen:

%Vor%

führt zu dieser Ausgabe bei return 0;

%Vor%

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%     
Andrei 31.05.2013 16:49
quelle

Tags und Links