Partager via


Fonctions membres spéciales

Les fonctions membres spéciales sont des fonctions membres de classe (ou de struct) qui, dans certains cas, le compilateur génère automatiquement pour vous. Ces fonctions sont le constructeur par défaut, le destructeur, le constructeur de copie et l’opérateur d’affectation de copie, et le constructeur de déplacement et l’opérateur d’affectation de déplacement. Si votre classe ne définit pas une ou plusieurs fonctions membres spéciales, le compilateur peut déclarer et définir implicitement les fonctions utilisées. Les implémentations générées par le compilateur sont appelées fonctions membres spéciales par défaut . Le compilateur ne génère pas de fonctions si elles ne sont pas nécessaires.

Vous pouvez déclarer explicitement une fonction membre spéciale par défaut à l’aide du mot clé = par défaut . Cela entraîne la définition de la fonction uniquement si nécessaire, de la même façon que si la fonction n’a pas été déclarée du tout.

Dans certains cas, le compilateur peut générer des fonctions membres spéciales supprimées , qui ne sont pas définies et ne peuvent donc pas être appelées. Cela peut se produire dans les cas où un appel à une fonction membre spéciale particulière sur une classe n’a pas de sens, étant donné d’autres propriétés de la classe. Pour empêcher explicitement la génération automatique d’une fonction membre spéciale, vous pouvez la déclarer comme supprimée à l’aide du mot clé = delete .

Le compilateur génère un constructeur par défaut, un constructeur qui ne prend aucun argument, uniquement lorsque vous n’avez déclaré aucun autre constructeur. Si vous n’avez déclaré qu’un constructeur qui accepte des paramètres, le code qui tente d’appeler un constructeur par défaut entraîne la production d’un message d’erreur par le compilateur. Le constructeur par défaut généré par le compilateur effectue une initialisation par défaut simple par défaut par membre de l’objet. L’initialisation par défaut laisse toutes les variables membres dans un état indéterminé.

Le destructeur par défaut effectue une destruction par membre de l’objet. Elle est virtuelle uniquement si un destructeur de classe de base est virtuel.

Les opérations de construction et d’affectation de copie et de déplacement par défaut effectuent des copies de modèle de bits ou des déplacements de membres de données non statiques. Les opérations de déplacement sont générées uniquement lorsqu’aucune opération de destructeur ou de déplacement ou de copie n’est déclarée. Un constructeur de copie par défaut est généré uniquement lorsqu’aucun constructeur de copie n’est déclaré. Elle est implicitement supprimée si une opération de déplacement est déclarée. Un opérateur d’affectation de copie par défaut est généré uniquement lorsqu’aucun opérateur d’affectation de copie n’est déclaré explicitement. Elle est implicitement supprimée si une opération de déplacement est déclarée.

Voir aussi

Informations de référence sur le langage C++