3 réponses
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
29 juil. 2004 à 14:51
29 juil. 2004 à 14:51
ca ressemble à un probleme de passage d'arguments non?
en gros dans ta premiere fonction tu a un vctor avec des pointeur tu le passe a la seconde qui fait des "release" de ces pointeurs et tu recupere l'objet...et la tu as encore les pointeurs mais ils pointent vers rien c'est ca?
COIN!
en gros dans ta premiere fonction tu a un vctor avec des pointeur tu le passe a la seconde qui fait des "release" de ces pointeurs et tu recupere l'objet...et la tu as encore les pointeurs mais ils pointent vers rien c'est ca?
COIN!
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
29 juil. 2004 à 15:35
29 juil. 2004 à 15:35
ca a l air d'etre un sacré sac de noeud ton histoire..
verifie dans tes passages d'argument qu' a un moment tu fait pas un passage par copie au lieu d'un passage par référence car le probleme tel que tu l'as decrit et typique de ce genre de chose
COIN!
verifie dans tes passages d'argument qu' a un moment tu fait pas un passage par copie au lieu d'un passage par référence car le probleme tel que tu l'as decrit et typique de ce genre de chose
COIN!
Si je manipûlais des valeurs par copie, les objets ne seraient pas dependant. Or, ils le sont!
Deplus, je trravail par l'intermediaire de pointeur, donc directement sur les valeurs.
Les observations et conclusions faites sont:
Si on créé un objet (new) et qu'on fasse un push_back avec 2 vectors, ex:
Objet ob = new Objet(poilopasme);
m_vect1.puch_back(ob);
m_vect2.push_back(ob);
Puis:
m_vect1.erase(m_vect1.begin());
On observe que m_vect1.begin()==m_vect.end()
mais : m_vect2(m_vect2.begin()) !=NULL et les instances à l'interieur sont NULL!!
=> m_vect1.erase efface les'objets créént à l'interieur de l'objet de vect1.....
Plus concretement:
connect
/*********\
* getTerm()*
* *
\*********/
\ \
term1 term2
connect, term1 et term2 sont des instances (new) non nulles
on fait: v1.push_back(connect);
v2.push_back(connect);
v1.erase(v1.begin());
//et la:
v2.getTerm() existe
mais: == NULL!!
Deplus, je trravail par l'intermediaire de pointeur, donc directement sur les valeurs.
Les observations et conclusions faites sont:
Si on créé un objet (new) et qu'on fasse un push_back avec 2 vectors, ex:
Objet ob = new Objet(poilopasme);
m_vect1.puch_back(ob);
m_vect2.push_back(ob);
Puis:
m_vect1.erase(m_vect1.begin());
On observe que m_vect1.begin()==m_vect.end()
mais : m_vect2(m_vect2.begin()) !=NULL et les instances à l'interieur sont NULL!!
=> m_vect1.erase efface les'objets créént à l'interieur de l'objet de vect1.....
Plus concretement:
connect
/*********\
* getTerm()*
* *
\*********/
\ \
term1 term2
connect, term1 et term2 sont des instances (new) non nulles
on fait: v1.push_back(connect);
v2.push_back(connect);
v1.erase(v1.begin());
//et la:
v2.getTerm() existe
mais: == NULL!!
29 juil. 2004 à 15:02
c'est un objet crée avant. je le passe dans un vector (push_back), puis le meme objet dans un autre vector (qui se trouve ailleurs).
Ensuite, je reviens à l'endroit de la premiere affectation, et je fait .erase(iter).
Je fais de meme avec le deuxieme qui ne possede plus l'objet, mais qui a encore son pointeur (enfin, je croi par deduction)