Maison > développement back-end > C++ > Quand les constructeurs de déplacement et les opérateurs d'affectation de déplacement sont-ils automatiquement générés en C ?

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

Patricia Arquette
Libérer: 2024-11-28 05:23:13
original
949 Les gens l'ont consulté

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

Génération d'opérations de déplacement en C

En C 98, les constructeurs de copie et les opérateurs d'affectation étaient automatiquement générés pour les classes sans définitions personnalisées. Cependant, avec l'introduction de la sémantique de déplacement dans C 11, la génération d'opérations de déplacement nécessite une réflexion plus approfondie.

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

Constructeurs de déplacement et opérateurs d'affectation de déplacement sont automatiquement générés uniquement si certaines conditions sont remplies :

  • Sémantique de déplacement par défaut :Le Le compilateur génère des opérations de déplacement qui effectuent un déplacement au niveau du bit des données membres de l'objet.
  • Aucun destructeur défini par l'utilisateur : Si une classe a un destructeur défini par l'utilisateur, le compilateur ne génère pas automatiquement le déplacement opérations.
  • Aucune opération de copie définie par l'utilisateur : De même, si une classe a des opérations de copie définies par l'utilisateur, le compilateur ne le fait pas générer automatiquement des opérations de déplacement.

Exceptions à la génération automatique

Dans certains cas, les opérations de déplacement ne sont pas automatiquement générées, même si les conditions ci-dessus sont remplies. Par exemple :

  • Membres de classe avec des types de déplacement uniquement : Si une classe contient des membres avec des types de déplacement uniquement (c'est-à-dire des types qui ne peuvent pas être copiés), le compilateur ne peut pas automatiquement générer des opérations de déplacement.
  • Classes triviales : Classes avec uniquement des données membres triviales (par exemple, des entiers, chaînes) ont des opérations de copie et de déplacement implicitement définies, de sorte que le compilateur ne génère pas d'implémentations personnalisées.

Informations supplémentaires

Présentation de Howard Hinnant lors de la conférence ACCU 2014 fournit un tableau complet résumant les règles de génération automatique de membres spéciaux, y compris les opérations de déplacement. Les diapositives soulignent que les comportements obsolètes sont indiqués par des carrés rouges.

Pour garantir que la sémantique de déplacement est gérée correctement, il est recommandé de suivre la « règle de 3 » de la C 98/03. Cela signifie déclarer explicitement les deux membres de la copie si le destructeur est déclaré, ou déclarer au moins un des membres de la copie.

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