C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

map::insert()

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Flzw
Guest





PostPosted: Sat Aug 14, 2004 5:03 pm    Post subject: map::insert() Reply with quote



Bonjour,

J'ai quelquechose du genre

ObjectList.insert(make_pair(key, CObject(Name,Arg)));

Et euh, ca marche pas, la taille de ObjectList est bien augmentée etc,
mais l'objet inséré inséré est créé et puis detruit juste apres je vois pas
pourquoi...


Back to top
Cyrille Karmann
Guest





PostPosted: Sat Aug 14, 2004 5:15 pm    Post subject: Re: map::insert() Reply with quote



"Flzw" <flownz (AT) wanadoo (DOT) fr> disait:
Quote:
Bonjour,

J'ai quelquechose du genre

ObjectList.insert(make_pair(key, CObject(Name,Arg)));

Et euh, ca marche pas, la taille de ObjectList est bien augmentée
etc,
mais l'objet inséré inséré est créé et puis detruit juste apres je vois
pas pourquoi...

L'objet "CObject(Name,Arg)" est un objet temporaire qui est détruit
(probablement) après l'appel de make_pair. Mais la map en conserve une
copie.

Je suppose que puisque tu dis que l'objet "est créé et puis détruit",
c'est que tu repère d'une manière ou d'une autre les passages dans le
constructeur et le destructeur. Mais tu n'as peut-être pas pensé au
constructeur de copie qui est créé par le compilateur même si tu ne le
l'écris pas toi-même.

--
Cyrille

Back to top
Flzw
Guest





PostPosted: Sat Aug 14, 2004 5:20 pm    Post subject: Re: map::insert() Reply with quote




"Cyrille Karmann" <cyrille (AT) frsf (DOT) invalid> wrote

Quote:
"Flzw" <flownz (AT) wanadoo (DOT) fr> disait:
Bonjour,

J'ai quelquechose du genre

ObjectList.insert(make_pair(key, CObject(Name,Arg)));

Et euh, ca marche pas, la taille de ObjectList est bien augmentée
etc,
mais l'objet inséré inséré est créé et puis detruit juste apres je vois
pas pourquoi...

L'objet "CObject(Name,Arg)" est un objet temporaire qui est détruit
(probablement) après l'appel de make_pair. Mais la map en conserve une
copie.

C'est bien ce que je pensais.

Quote:
Je suppose que puisque tu dis que l'objet "est créé et puis détruit",
c'est que tu repère d'une manière ou d'une autre les passages dans le
constructeur et le destructeur. Mais tu n'as peut-être pas pensé au
constructeur de copie qui est créé par le compilateur même si tu ne le
l'écris pas toi-même.

En effet le destructeur est appelé plus de fois que le constructeur, je
trouvais ca etrange, existe t il une facon d'avoir le meme resultat en ne
creant qu'une instance de l'objet en tout et sans necessiter un constructeur
par defaut ni un operateur de copie, merci.



Back to top
Cyrille Karmann
Guest





PostPosted: Sat Aug 14, 2004 6:00 pm    Post subject: Re: map::insert() Reply with quote

"Flzw" <flownz (AT) wanadoo (DOT) fr> disait:
Quote:

Je suppose que puisque tu dis que l'objet "est créé et puis détruit",
c'est que tu repère d'une manière ou d'une autre les passages dans le
constructeur et le destructeur. Mais tu n'as peut-être pas pensé au
constructeur de copie qui est créé par le compilateur même si tu ne le
l'écris pas toi-même.

En effet le destructeur est appelé plus de fois que le constructeur, je
trouvais ca etrange, existe t il une facon d'avoir le meme resultat en
ne creant qu'une instance de l'objet en tout et sans necessiter un
constructeur par defaut ni un operateur de copie, merci.

Ben... si vous voulez le contrôle total de la durée de vie de vos
objets, vous pouvez le créer dynamiquement.

CObject *obj = new CObject(Name,Arg);
ObjectList.insert(make_pair(key, obj));

// ....
delete obj;

L'ennui, c'est bien sûr qu'il ne faut pas oublier d'appeler delete, et
qu'il faut éviter de l'appeler tant que ObjectList contient encore un
pointeur sur l'objet, sinon un bout de votre code risque de vouloir s'en
servir et si vous l'avez détruit, ça fera kaboum.

Il y a peut-être moyen de s'en tirer avec des "pointeurs intelligents"
avec compteur de références, mais je ne suis pas très au fait de ce
genre de techniques.

--
Cyrille

Back to top
Flzw
Guest





PostPosted: Sat Aug 14, 2004 6:11 pm    Post subject: Re: map::insert() Reply with quote


Quote:
Ben... si vous voulez le contrôle total de la durée de vie de vos
objets, vous pouvez le créer dynamiquement.

CObject *obj = new CObject(Name,Arg);
ObjectList.insert(make_pair(key, obj));

// ....
delete obj;


Ok donc il faut que je passe sur du std::map <string, CObject*>

Merci.



Back to top
drkm
Guest





PostPosted: Sun Aug 15, 2004 12:29 am    Post subject: Re: map::insert() Reply with quote

"Flzw" <flownz (AT) wanadoo (DOT) fr> writes:

Quote:
En effet le destructeur est appelé plus de fois que le constructeur, je
trouvais ca etrange,

Ce n'est pas normal. Par contre, si tu n'as qu'un destructeur, tu
peux cependant avoir plusieurs constructeurs. Peut-être la confusion
vient-elle de là ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Flzw
Guest





PostPosted: Sun Aug 15, 2004 8:49 am    Post subject: Re: map::insert() Reply with quote


Quote:
Ce n'est pas normal. Par contre, si tu n'as qu'un destructeur, tu
peux cependant avoir plusieurs constructeurs. Peut-être la confusion
vient-elle de là ?

Non je n'ai qu'un constructeur, mais comme suggeré plus haut, le compilateur
appelle peut etre un constructeur de copine par defaut qu'il a fait lui meme
?



Back to top
Pierre Maurette
Guest





PostPosted: Sun Aug 15, 2004 10:20 am    Post subject: Re: map::insert() Reply with quote

"Flzw" <flownz (AT) wanadoo (DOT) fr> a écrit:
[...]
Quote:
appelle peut etre un constructeur de copine par defaut qu'il a fait lui meme
?
Un constructeur de copine, ça m'intéresse, je suis un peu "à la rue"

actuellement. Si vous pouviez m'en faire uns ... copine ?
--
Pierre

Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Aug 15, 2004 10:37 am    Post subject: Re: map::insert() Reply with quote

On Sun, 15 Aug 2004 12:20:55 +0200, Pierre Maurette
<maurettepierre (AT) wanadoo (DOT) fr>:

Quote:
Un constructeur de copine, ça m'intéresse, je suis un peu "à la rue"
actuellement. Si vous pouviez m'en faire uns ... copine ?

Fais gaffe au cast (pas toujour explicite) de "copine" vers
"épouse"...
http://www.naute.com/blagues/epouse1.0.phtml


--
;-)

Back to top
drkm
Guest





PostPosted: Sun Aug 15, 2004 12:59 pm    Post subject: Re: map::insert() Reply with quote

"Flzw" <flownz (AT) wanadoo (DOT) fr> writes:

Quote:
Ce n'est pas normal. Par contre, si tu n'as qu'un destructeur, tu
peux cependant avoir plusieurs constructeurs. Peut-être la confusion
vient-elle de là ?

Non je n'ai qu'un constructeur, mais comme suggeré plus haut, le compilateur
appelle peut etre un constructeur de copine

:-D

Quote:
par defaut qu'il a fait lui meme
?

C'est bien ce que je voulais dire. Remarque que constructeur de
copie et constructeur par défaut sont deux choses différentes.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.