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:
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:
Declaration | Copy Constructor | Zuweisungsoperator kopieren | Konstruktor verschieben und Zuweisung verschieben Operator |
---|---|---|---|
Keine | Generiert | Generiert | Nicht generiert |
Konstruktor kopieren | Nicht Generiert | Generiert | Nicht generiert |
Kopierzuweisungsoperator | Nicht generiert | Nicht generiert | Nicht generiert |
Verschieben Konstruktor | Nicht generiert | Nicht generiert | Nicht generiert |
Zuweisungsoperator verschieben | Nicht generiert | Nicht generiert | Nicht Generiert |
Destruktor | Nicht generiert | Nicht generiert | Nicht generiert |
Konstruktor kopieren und Zuweisungsoperator kopieren | Nicht Generiert | Nicht generiert | Nicht generiert |
Konstruktor kopieren und Konstruktor verschieben | Nicht generiert | Nicht generiert | Nicht Generiert |
Konstruktor kopieren und Zuweisungsoperator verschieben | Nicht generiert | Nicht generiert | Nicht generiert |
Zuweisungsoperator kopieren und Konstruktor verschieben | Nicht Generiert | Nicht generiert | Nicht generiert |
Zuweisungsoperator kopieren & Zuweisungsoperator verschieben | Nicht generiert | Nicht generiert | Nicht Generiert |
Konstruktor und Destruktor verschieben | Nicht generiert | Nicht generiert | Nicht generiert |
Zuweisungsoperator und Destruktor verschieben | Nicht Generiert | Nicht generiert | Nicht generiert |
Konstruktor kopieren & Zuweisungsoperator kopieren & Konstruktor verschieben | Nicht generiert | Nicht generiert | Nicht Generiert |
Kopierkonstruktor & Kopierzuweisungsoperator & Verschiebungszuweisungsoperator | Nicht generiert | Nicht generiert | Nicht generiert |
Konstruktor kopieren und Konstruktor verschieben und Zuweisung verschieben Operator | Nicht generiert | Nicht generiert | Generiert |
Zuweisungsoperator kopieren & Konstruktor verschieben & Zuweisungsoperator verschieben | Nicht generiert | Nicht Generiert | Generiert |
Durch die Erkennung dieser Regeln können Entwickler sicherstellen, dass ihre Klassen die Bewegungssemantik richtig nutzen und optimale Effizienz erreichen.
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