Pouvez-vous m'expliquer ce qu'est un constructeur par copie, a quoi ça sert, quand faut-il l'utiliser,...?
Merci de votre collaboration.
Version imprimable
Pouvez-vous m'expliquer ce qu'est un constructeur par copie, a quoi ça sert, quand faut-il l'utiliser,...?
Merci de votre collaboration.
Salut,
Comme le nom l'indique, le constructeur par copie va avoir comme objectif de... construire un objet qui sera... la copie d'un objet de type identique existant (AKA: étant instancié) par ailleurs ;)
Le but est simplement de pouvoir effectuer une copie de l'instance en cours d'utilisation.
D'un autre point de vue, c'est le constructeur par copie qui sera utilisé chaque fois qu'il s'agit effectivement... d'obtenir une copie d'une instance existante par ailleurs ;)
Ainsi, le constructeur par copie sera, par exemple, invoqué automatiquement si tu décide de transmettre un objet en paramètre qui ne soit pas une référence (ce qui occasionne le fait que le paramètre est... la copie de l'objet d'origine)
Le constructeur par copie fait partie des fonctions qui sont systématiquement fournie par le compilateur, afin de permettre la pleine expression du concept de RAII (Ressource Acquisition Is Initialisation)
En effet, si l'on regarde la "forme canonique orthodoxe" de coplien, on se rend compte qu'un objet doit:
Le constructeur par copie permet d'envisager... la copie de l'objet ;)
- pouvoir être construit
- pouvoir être copié
- pouvoir être assigné
- pouvoir être détruit
Lorsque tu laisse le compilateur implémenter lui-même le constructeur, il va organiser la copie membre à membre du contenu de l'objet.
Si l'ensemble du contenu de ton objet a sémantique de valeur, et qu'il n'y a pas de nécessiter de manipuler des allocations dynamiques de la mémoire, tu peux envisager de laisser le compilateur implémenter le comportement par défaut.
Et à l'inverse, si ton objet possède des allocations dynamiques de mémoire ou d'autres ressources, il doit:
- soit ne pas être copiable du tout (constructeurs de copie et opérateur d'affectation déclarés privés, non-définis)
- soit avoir un constructeur de copie et un opérateur d'affectation adéquats.
- ou alors, il peut être copiable mais non-modifiable, auquel cas il aurait un constructeur de copie adéquat, mais un opérateur d'affectation déclaré privé et non-défini.