"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Quand les constructeurs de déplacement et les opérateurs d’affectation de déplacement sont-ils automatiquement générés en C++11 ?

Quand les constructeurs de déplacement et les opérateurs d’affectation de déplacement sont-ils automatiquement générés en C++11 ?

Publié le 2024-12-26
Parcourir:391

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

Génération automatique d'opérations de déplacement

En C 11, l'introduction de la sémantique de déplacement a soulevé des questions sur les circonstances dans lesquelles les constructeurs de déplacement et l'affectation de déplacement les opérateurs sont automatiquement générés.

Sous C 11, les opérations de déplacement ne sont pas automatiquement générées comme les constructeurs de copie et les opérateurs d'affectation de copie. Le compilateur ne génère une sémantique de déplacement que si certaines conditions sont remplies :

  • Aucun constructeur de copie ou opérateur d'affectation de copie défini par l'utilisateur n'existe. Si l'un de ces membres est explicitement défini, aucun déplacement les opérations sont générées.
  • Aucun destructeur défini par l'utilisateur n'est défini. La définition d'un destructeur désactive la génération de déplacement sémantique.
  • La classe n'a aucun membre non copiable. Les opérations de déplacement ne sont pas générées si la classe contient des membres qui ne peuvent pas être déplacés, tels que des pointeurs vers la mémoire allouée dynamiquement.

Comprendre ces règles aide à guider la mise en œuvre de classes qui utilisent la sémantique de déplacement. Le tableau de la présentation de Howard Hinnant donne un aperçu concis de la génération automatique de membres spéciaux, y compris les opérations de déplacement :

DéclarationCopier le constructeurOpérateur d'affectation de copieDéplacer le constructeur et déplacer l'affectation Opérateur
AucunGénéréGénéréNon généré
Copier le constructeurNon GénéréGénéréNon généré
Opérateur d'affectation de copieNon généréNon généré Non généré
Déplacer le constructeurNon GénéréNon généréNon généré
Opérateur d'affectation de déplacementNon généréNon généréNon généré
DestructeurNon GénéréNon généréNon généré
Constructeur de copie et opérateur d'affectation de copieNon généréNon GénéréNon généré
Copier le constructeur et déplacer ConstructeurNon généréNon généréNon généré
Copier le constructeur et déplacer l'opérateur d'affectationNon GénéréNon généréNon généré Généré
Opérateur d'affectation de copie et constructeur de déplacementNon généréNon généréNon généré
Opérateur d'affectation de copie et opérateur d'affectation de déplacementNon généréNon GénéréNon généré
Déplacer le constructeur et le destructeurNon généréNon généréNon généré
Déplacer l'opérateur et le destructeur d'affectationNon GénéréNon généréNon généré
Constructeur de copie et opérateur d'affectation de copie et constructeur de déplacementNon généréNon généréNon généré
Copier le constructeur et copier Opérateur d'affectation et opérateur d'affectation de déplacementNon généréNon généréNon généré
Constructeur de copie et constructeur de déplacement et affectation de déplacement OpérateurNon généréNon GénéréGénéré
Opérateur d'affectation de copie et constructeur de déplacement et opérateur d'affectation de déplacementNon généréNon généréGénéré

En reconnaissant ces règles, les développeurs peuvent s'assurer que leurs classes utilisent correctement déplacer la sémantique et atteindre une efficacité optimale.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3