Warum wurde der Move-Konstruktor nicht aufgerufen? [Duplikat]

9

Ich mache eine Übung von C ++ Primer 5th Edition , die wie folgt lautet:

  

Übung 13.50: Setzen Sie print-Anweisungen in die Verschiebeoperationen in Ihrem    String Klasse und führen Sie das Programm aus Übung 13.48 in § 13.6.1 (p.   534), die einen Vektor verwendet haben, um zu sehen, wann die Kopien vermieden werden. (S.544)

Die String ist eine Klasse für die Praxis, die sich wie ein std::string verhält, ohne eine Vorlage zu verwenden. Die Datei String.h :

%Vor%

Implementierung für Standard, Kopieren und Verschieben des Konstruktors von String.cpp :

%Vor%

Main.cpp :

%Vor%

Die Ausgabe:

%Vor%

Wie man sieht, wurde der Move-Konstruktor überhaupt nicht aufgerufen. Warum wurde der Move-Konstruktor nicht aufgerufen, wenn der Vektor mehr Speicher zuordnet?

Aktualisierung:

Die Info des Compilers:

%Vor%

main.cpp mit Druckkapazität und dessen Ausgabe:

%Vor%

Ausgabe:

%Vor%     
Yue Wang 07.01.2014, 09:13
quelle

1 Antwort

1

Ich reproduziere mit gcc 4.7.1 auf MinGW ...

Das Hinzufügen von ~String() noexcept löst das Problem ...

    
Jarod42 07.01.2014, 10:16
quelle