Constructeur par recopie dans c++

Fermé
tata - 11 juin 2008 à 19:56
 patatosaure - 11 juin 2008 à 20:00
Bonjour,
quel est le rôle d'un constructeur par recopie ? et quelle différence présente avec le constructeur

1 réponse

patatosaure
11 juin 2008 à 20:00
<quote>Le constructeur de recopie
Le constructeur de recopie est un constructeur qui construit un objet à partir d'un autre objet de la même classe. C'est un constructeur qui prend en paramètre une référence constante sur un objet de la même classe :

class A {
...
public:

A(const A & a); // Constructeur de recopie de la classe A
};Il est possible d'appeler explicitement le constructeur de recopie à la construction d'un objet :

A a1; // Appel au constructeur par défaut
A a2(a1); // Appel au constructeur de recopieLe constructeur de recopie est appelé lors du passage par valeur d'un objet : tout objet doit donc avoir un constructeur de recopie. Si celui-ci n'est pas spécifié par l'utilisateur lors de la déclaration de la classe, le compilateur génère un constructeur de recopie par défaut qui fait une copie brutale (bit à bit) de l'objet. Pour les objets simples (les objets qui n'ont que des attributs non-dynamiques), cela ne pose pas problème. Cependant, dès qu'il y a des attributs pointeurs, le constructeur de recopie par défaut va recopier uniquement le pointeur : les deux objets auront des attributs pointeurs pointant vers le même objet ce qui risque de poser problème lors de la destruction de l'un des deux objets... Dans ces cas là, il est indispensable d'écrire un constructeur de recopie qui duplique correctement les éléments pointés.

class Etudiant {
...
public:
...
// Constructeur de recopie de la classe Etudiant
Etudiant(const & Etudiant e) : moyenne(e.moyenne) {
if(e.nom) {
nom = new char[strlen(e.nom)+1];
strcpy(nom, e.nom);
}
}
};</quote>


(source : http://frog.isima.fr/antoine/avance.shtml)


ou, autre lien : http://lcvmwww.epfl.ch/~caussi/TPs/cpp/node12.html
4