300Fermer302
GoldenCrystalLe 15/01/2010 à 19:46
Le constructeur de copie et l'opérateur = ça sert que quand tu manipules des champs non simplement duplicables (typiquement: pointeurs), sinon... bof bof quoi.
Et même encore, si tu sais que ton objet ne sera pas utilisé en recopie (tu l'alloueras uniquement avec un new, et jamais autrement, et tu n'aura jamais besoin d'en copier un) alors c'est pas forcément la peine de s'encombrer de ça.
Le passage par valeur, c'est une recopie, c'est un cas où le constructeur par recopie et le = sont strictement nécéssaires (enfin les deux vont ensemble, c'est con de faire l'un sans l'autre).
Enfin, avoir un constructeur de recopie, et opérateur = surchargé ça ne fera jamais de mal (si c'est bien codé wink )... Mais si ça sert a rien, tu fais du code pour la décoration...

Le passage par référence ça fonctionne comme un pointeur déréférencé, pointeur qui ne peut jamais être NULL et dont tu peux pas modifier la valeur. (Mais tu peux la connaître avec un bête & comme d'hab). En tout cas, ça veut dire pas de recopie.
Il n'y a qu'un seul truc fourbe, tu peux facilement passer par référence des objets construits de manière temporaire.
ssiner...
Exemple: Dessiner(const Rectangle& rect); // Prototype
Dessiner(Rectangle(0, 0, 10, 10)); // Dans ce cas, Rectangle est un objet temporaire, dont tu fileras la référence à De

Si tu ne fais pas gaffe et que tu stockes quelque part la référence, ou le pointeur (l'un ou l'autre on s'en fout) vers cette valeur temporaire, dans le but de l'utiliser plus tard, c'est plantage assuré oui