Bonjour je bloque sur la définition d'un constructeur de recopie d'une classe "liste" afin de sortir du programme principale sans provoque une exeption ou erreur... :)
Je me doute que cela tourne autour des "news" et "delete" mais je dois mal les utiliser... merci pour une solution et voici le code :
bein lorsque je déclare mon constructeur de telle sorte :
liste :: liste(const &l)
j'aimerai recopie l'objet référencé "l" dans la nouvelle liste qui est appele avec le constructeur de recopie...
je veux juste définir moi meme ce constructeur de rocopie pour pouvoir passer l'objet liste en parametre sans le referencer ou utiliser son adresse via un pointeur...
sinon je sais et connais l'utilisation des templates, conteneur et autres standards de la STL mais je voudrai tout faire comme un grand tout seul et réussir a, via le destructeur, enlever mes objets de la memoire dynamique sans provoquer d'erreur lorsque le destructeur est appele car avec mes essais il doit supprimer deux ou plusieurs fois le meme objet et donc creer une ambiguite
"Cette fonction n'est-elle pas censée renvoyer un pointeur sur un suivant ? Ou alors le nom est mal choisi ?!
Ensuite, si je comprend bien tu veux créé une liste composée d'éléments ou reprendre une liste déjà créée et sauvegardée. Me trompai-je ?"
je veux juste effectuer une recopie de ma liste lorsqu'elle est passee en parametre dans une fonction quelconque pour ne pas la passer en reference ou via son pointeur, c'est tout comme je l'ai fait pour l'objet point :
point :: point(const point &P)
{
x = P.x ;
y = P.y ;
}
voila... mais en faisant mes essai je la recopie tres mal et surtout je detruit le meme objet plusieurs fois en sortie de fonction ou du main via le destructeur qui ne peut "delete" un pointeur sur NULL
pour ton constructeur par copie, tu parcour la liste en parametre et tu insert les elements parcourues
il faut aussi que tu rajoute l'operateur = si tu veux que ta classe soit proteger contre les fuites
ne fais jamais ca
point :: point(const point &P)
{
x = P.x ;
y = P.y ;
}
c'est de la desoptimisation, le compilo le fait tres bien, et meme mieux tout seul
point :: point(const point &P)
{
x = P.x ;
y = P.y ;
}
c'est de la desoptimisation, le compilo le fait tres bien, et meme mieux tout seul"
a bon ce n'est pas bon de definir le const. de recopie comme je l'ai fait... ?
en gros le compilo le fait mieux que ça :
[inline point :: point(const point &pt)
{
x = pt.x;
y = pt.y;
}
//---------------------------------------------------------------------------
inline point & point :: operator =(const point &pt)
{
if(&pt != this)
{
x = pt.x;
y = pt.y;
}
return *this;
}
]
pour la recopie et l'affectation ?
sinon comment parcourir ma liste en parametre puisqu'elle est constante ?
[pour ton constructeur par copie, tu parcour la liste en parametre et tu insert les elements parcourues
il faut aussi que tu rajoute l'operateur = si tu veux que ta classe soit proteger contre les fuites]
comment t'y prendrais tu car la solution proposee par thierry la fronde n'est pas adequate et provoque des exeptions... car ma liste a recopie est elle constante et je ne peux donc modifier aucun membre de celle-ci ???
d'une maniere generale, declare des pointeurs en local pour parcourir a liste sans la modifié (comme l'exemple de thierry la fronde, mais adapté à ta liste si ca ne l'est pas)