„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wann werden Verschiebungskonstruktoren und Verschiebungszuweisungsoperatoren in C++11 automatisch generiert?

Wann werden Verschiebungskonstruktoren und Verschiebungszuweisungsoperatoren in C++11 automatisch generiert?

Veröffentlicht am 26.12.2024
Durchsuche:571

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 Bewegungskonstruktoren und Bewegungszuweisungen verwendet werden Operatoren werden automatisch generiert.

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

  • Es ist kein benutzerdefinierter Kopierkonstruktor oder Kopierzuweisungsoperator vorhanden. Wenn eines dieser Mitglieder explizit definiert ist, erfolgt keine Verschiebung Operationen werden 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 Howard Hinnants Präsentation bietet einen kurzen Überblick über die automatische Generierung spezieller Elemente, einschließlich Verschiebungsoperationen:

DeclarationCopy ConstructorZuweisungsoperator kopierenKonstruktor verschieben und Zuweisung verschieben Operator
KeineGeneriertGeneriertNicht generiert
Konstruktor kopierenNicht GeneriertGeneriertNicht generiert
KopierzuweisungsoperatorNicht generiertNicht generiert Nicht generiert
Verschieben KonstruktorNicht generiertNicht generiertNicht generiert
Zuweisungsoperator verschiebenNicht generiertNicht generiertNicht Generiert
DestruktorNicht generiertNicht generiertNicht generiert
Konstruktor kopieren und Zuweisungsoperator kopierenNicht GeneriertNicht generiertNicht generiert
Konstruktor kopieren und Konstruktor verschiebenNicht generiertNicht generiert Nicht Generiert
Konstruktor kopieren und Zuweisungsoperator verschiebenNicht generiertNicht generiertNicht generiert
Zuweisungsoperator kopieren und Konstruktor verschiebenNicht GeneriertNicht generiertNicht generiert
Zuweisungsoperator kopieren & Zuweisungsoperator verschiebenNicht generiert Nicht generiertNicht Generiert
Konstruktor und Destruktor verschiebenNicht generiertNicht generiertNicht generiert
Zuweisungsoperator und Destruktor verschiebenNicht GeneriertNicht generiertNicht generiert
Konstruktor kopieren & Zuweisungsoperator kopieren & Konstruktor verschiebenNicht generiertNicht generiertNicht Generiert
Kopierkonstruktor & Kopierzuweisungsoperator & VerschiebungszuweisungsoperatorNicht generiertNicht generiertNicht generiert
Konstruktor kopieren und Konstruktor verschieben und Zuweisung verschieben OperatorNicht generiertNicht generiertGeneriert
Zuweisungsoperator kopieren & Konstruktor verschieben & Zuweisungsoperator verschiebenNicht generiertNicht GeneriertGeneriert

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

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3