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
:
Implementierung für Standard, Kopieren und Verschieben des Konstruktors von String.cpp
:
Main.cpp
:
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:
Ausgabe:
%Vor%Tags und Links c++ c++11 constructor stl move-constructor