2017-12-12 1 views
-1
CString s("ok"); 
CString alpha=move(s); 

Mit diesem genauen Code verwendet der Compiler Copy Constructor zu initial alpha ...!Standardmäßig verschieben Sie den Konstruktor

aber wenn ich explizit move constructor definiere, benutzt es move constructor und erledigt die Arbeit nach Bedarf ...!

Die Frage ist, wenn Sie ein Schlüsselwort Move haben, und sogar mit dem Move-Schlüsselwort (kein Move-Konstruktor selbst definieren), verwendet es immer noch den Kopierkonstruktor ... Warum, was ist die Standardcodierung von Move-Konstruktor und was ist die Verwendung von Move Schlüsselwort, wenn kein Move Konstruktor von unserer Seite definiert ist ..?

+5

'move' ist eine Funktion, kein Schlüsselwort. Es bewegt auch nichts. Move-Konstruktoren übernehmen das Verschieben. – chris

+1

Mögliches Duplikat von [Was sind Umzugssemantik?] (Https://stackoverflow.com/questions/3106110/what-are-move-semantics) – user1810087

+0

@chris ich weiß, dass. Das frage ich nicht, Bruder. Wenn in unserer Klasse ein Move-Konstruktor verfügbar ist, wird der Move-Konstruktor verwendet. Aber wenn wir diese Bewegungsfunktion nicht verwenden. Kopieren Konstruktor heißt –

Antwort

2

Der Compiler bietet keinen Standard-Move-Konstruktor, wenn Sie einen benutzerdefinierten Kopierkonstruktor, Zuweisungsoperator oder Destruktor bereitstellen. Die Annahme ist, dass, wenn Sie eine spezielle Logik zum Kopieren oder Zerstören des Objekts benötigen, es wahrscheinlich ist, dass Sie auch eine spezielle Logik zum Verschieben benötigen, und die Verwendung des Standards einfach gefährlich sein könnte. Wenn Sie dies nicht tun, können Sie dem Compiler explizit mitteilen, dass er den Standard-Move-Konstruktor bereitstellen soll.

struct CString 
{ 
    CString(const CString& other) 
    { 
     // Do whatever 
    } 

    CString(CString&&) = default; 
}; 

Seien Sie vorsichtig dabei. Für einen Zeichenfolgen-Wrapper müssen Sie wahrscheinlich einen Zeiger auf nullptr in Ihrem Verschiebungskonstruktor setzen, um ein doppeltes Löschen zu vermeiden.

Verwandte Themen