Heim > Backend-Entwicklung > C++ > Wann werden Bewegungskonstruktoren und Bewegungszuweisungsoperatoren in C 11 automatisch generiert?

Wann werden Bewegungskonstruktoren und Bewegungszuweisungsoperatoren in C 11 automatisch generiert?

Patricia Arquette
Freigeben: 2024-11-27 05:26:18
Original
407 Leute haben es durchsucht

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

Automatische Generierung von Bewegungsoperationen

In C 11 warf die Einführung der Bewegungssemantik Fragen zu den Umständen auf, unter denen Bewegungskonstrukteure und Bewegungszuweisungen durchgeführt werden Operatoren werden automatisch generiert.

Unter C 11 werden Verschiebungsoperationen nicht automatisch generiert, wie Kopierkonstruktoren und Kopierzuweisungsoperatoren. Der Compiler generiert nur dann eine Verschiebungssemantik, wenn bestimmte Bedingungen erfüllt sind:

  • Kein benutzerdefinierter Kopierkonstruktor oder Kopierzuweisungsoperator vorhanden.Wenn eines dieser Mitglieder explizit definiert ist, erfolgt keine Verschiebung Es werden Operationen generiert.
  • Es ist kein benutzerdefinierter Destruktor definiert. Durch die Definition eines Destruktors wird die Generierung von Verschiebungen deaktiviert Semantik.
  • Die Klasse hat keine nicht kopierbaren Mitglieder. Verschiebungsvorgänge werden nicht generiert, wenn die Klasse Mitglieder enthält, die nicht verschoben werden können, wie z. B. Zeiger auf dynamisch zugewiesenen Speicher.

Das Verständnis dieser Regeln hilft bei der Implementierung von Klassen, die Bewegungssemantik verwenden. Die Tabelle aus der Präsentation von Howard Hinnant bietet einen kurzen Überblick über die automatische Generierung spezieller Elemente, einschließlich Verschiebungsvorgänge:

Declaration Copy Constructor Copy Assignment Operator Move Constructor & Move Assignment Operator
None Generated Generated Not Generated
Copy Constructor Not Generated Generated Not Generated
Copy Assignment Operator Not Generated Not Generated Not Generated
Move Constructor Not Generated Not Generated Not Generated
Move Assignment Operator Not Generated Not Generated Not Generated
Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Move Constructor & Destructor Not Generated Not Generated Not Generated
Move Assignment Operator & Destructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Constructor Not Generated Not Generated Not Generated
Copy Constructor & Copy Assignment Operator & Move Assignment Operator Not Generated Not Generated Not Generated
Copy Constructor & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated
Copy Assignment Operator & Move Constructor & Move Assignment Operator Not Generated Not Generated Generated

Durch die Anerkennung dieser Regeln können Entwickler sicherstellen, dass ihre Klassen die Bewegungssemantik richtig nutzen und eine optimale Effizienz erreichen.

Das obige ist der detaillierte Inhalt vonWann werden Bewegungskonstruktoren und Bewegungszuweisungsoperatoren in C 11 automatisch generiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage