Maison >développement back-end >C++ >Quand les compilateurs C génèrent-ils automatiquement des constructeurs de déplacement et des opérateurs d'affectation ?

Quand les compilateurs C génèrent-ils automatiquement des constructeurs de déplacement et des opérateurs d'affectation ?

DDD
DDDoriginal
2024-12-19 09:34:10316parcourir

When Do C   Compilers Automatically Generate Move Constructors and Assignment Operators?

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

En C 98, le compilateur pouvait générer automatiquement des constructeurs de copie et des opérateurs d'affectation de copie pour les classes. Cependant, avec l'introduction de la sémantique de déplacement dans C 11, des questions se posent concernant la génération automatique d'opérations de déplacement.

Les constructeurs de déplacement et les opérateurs d'affectation de déplacement génèrent-ils automatiquement ?

Non, contrairement aux constructeurs de copie et aux opérateurs d'affectation de copie, le compilateur ne génère pas automatiquement d'opérations de déplacement pour les classes avec des constructeurs ou des affectations définis par l'utilisateur. opérateurs.

Cas où les opérations de déplacement ne sont pas automatiquement générées

Les opérations de déplacement ne sont pas automatiquement générées si :

  • La classe a un utilisateur -constructeur défini ou constructeur de copie.
  • La classe a un opérateur d'affectation ou une affectation de copie défini par l'utilisateur opérateur.
  • La classe a un destructeur non trivial.
  • La classe a une classe de base avec un destructeur non trivial.
  • La classe contient un ou membre non mobile.

Détermination de la génération automatique du mouvement Opérations

Pour déterminer si les opérations de déplacement sont automatiquement générées pour une classe, considérez les éléments suivants :

  • Si la classe n'a qu'un constructeur par défaut et aucun constructeur défini par l'utilisateur ou opérateurs d'affectation, des opérations de déplacement sont générées.
  • Si la classe a un constructeur ou un opérateur d'affectation défini par l'utilisateur, vous devez déclarer explicitement le déplacement opérations.
  • Si la classe a un destructeur non trivial ou une classe de base avec un destructeur non trivial, vous devez déclarer explicitement les opérations de déplacement.

Dépréciation d'Automatic Génération d'opérations de déplacement

En C 20, la génération automatique des opérations de déplacement est obsolète si la classe déclare un destructeur ou tout membre de copie (constructeur de copie, opérateur d’affectation de copie). Pour assurer la compatibilité avec les futures versions de C , il est recommandé de déclarer explicitement les opérations de déplacement pour les classes qui les nécessitent.

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!

Déclaration:
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