Constrcucteur par recopie et surcharge d'operateur =

bebert37 Messages postés 38 Date d'inscription jeudi 17 juillet 2003 Statut Membre Dernière intervention 16 février 2005 - 21 juil. 2003 à 14:36
bebert37 Messages postés 38 Date d'inscription jeudi 17 juillet 2003 Statut Membre Dernière intervention 16 février 2005 - 22 juil. 2003 à 09:44
quelqu'un pourrait-il m'exliquer comment ça se passe lors de l'utilisation du '=' en c++.
Je sais que lorsqu'on surcharge le egale le constructeur par recopie est appellé mais ou intervient'il ?
Si on crait un main comme le suivant
main(){
A* E1;
A E2;

E1 = new A();
E1.SetNom("Mon objet A");
E2 = *E1;
cout << E2.GetNom() << endl;

return EXIT-SUCCESS;
}

Le resultat de l'exemple précédent donne

on est passer dans la surcharge du =
on est passer par le recopieur
Mon Objet A

Or le code est fait de tel façon que normalement si on passe dans le recopieur on supprime la liste d'element. Mais la, bizarrement la liste d'element qui devrait etre supprimer y est encore puisque on a put lire le Nom du premiere element.
Si queqlu'un peut me renseigner ...
merci a vous !!!

Bebert37

voici le code source :
class A{

protected :
list<Element> E;

public:
A();
~A();
A(const A& o);
A operator(const A& o);
};

A::A(const A& o){
E.erase();
cout << "on est passer par le recopieur" << endl;
}

A A::operator=(const A& o){

E = o.E
cout << "on est passer dans la surcharge du =" << endl;
return *this;
}

// retourne le nom du premier element
char* A::GetNom(){

list<Element>::iterator p;

p = E.begin();

// retourne le nom de l'element
return p->RetNom();
}

3 réponses

tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
21 juil. 2003 à 19:44
en fait, l'operateur = est declaré avec comme parametre une reference sur l'objet. donc aucune copie n'est effectuée ...
la, il rentre ds la surcharge du =, jusque a tout est ok ..

enfin, le recopieur est appelé lorsque la fonction du = se termine et transmet un objet a son appelant (et non une reference) :)

en tout cas c comme ca que je le vois.
0
tcok Messages postés 61 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 3 août 2005
21 juil. 2003 à 19:54
ah excuse ! pour la deuxieme question : pourquoi la liste est pas detruite :

le constructeur de copie appelé detruit sa PROPRE liste alors que l'objet retourne est en parametre !

je crois que c pour ca !

@+
tcok
0
bebert37 Messages postés 38 Date d'inscription jeudi 17 juillet 2003 Statut Membre Dernière intervention 16 février 2005
22 juil. 2003 à 09:44
C'est vrai s'est logique
merci bien.
Mais dans ce cas comment se fait-il que l'on puisse acceder aux liste alors que le constructeur par recopie les a effacées ??
0
Rejoignez-nous