Pouvez-vous m'expliquer ce qu'est un constructeur par copie, a quoi ça sert, quand faut-il l'utiliser,...?
Merci de votre collaboration.
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.
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
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.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager