Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-27 05:26:18
original
357 Les gens l'ont consulté

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 des mouvements. 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 :

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

En reconnaissant ces règles, les développeurs peuvent garantir que leurs classes utilisent correctement la sémantique des mouvements et atteignent une efficacité optimale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal