popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005
-
12 août 2004 à 22:16
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
13 août 2004 à 23:49
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 :
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 13 août 2004 à 17:57
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 13 août 2004 à 18:03
"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
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 13 août 2004 à 19:31
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
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 13 août 2004 à 22:28
"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"
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 ?
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 13 août 2004 à 23:34
[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 ???
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 13 août 2004 à 23:49
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)