 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Flzw Guest
|
Posted: Sat Aug 14, 2004 5:03 pm Post subject: map::insert() |
|
|
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
|
Posted: Sat Aug 14, 2004 5:15 pm Post subject: Re: map::insert() |
|
|
"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
|
Posted: Sat Aug 14, 2004 5:20 pm Post subject: Re: map::insert() |
|
|
"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
|
Posted: Sat Aug 14, 2004 6:00 pm Post subject: Re: map::insert() |
|
|
"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
|
Posted: Sat Aug 14, 2004 6:11 pm Post subject: Re: map::insert() |
|
|
| 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
|
Posted: Sun Aug 15, 2004 12:29 am Post subject: Re: map::insert() |
|
|
"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
|
Posted: Sun Aug 15, 2004 8:49 am Post subject: Re: map::insert() |
|
|
| 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
|
Posted: Sun Aug 15, 2004 10:20 am Post subject: Re: map::insert() |
|
|
"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
|
Posted: Sun Aug 15, 2004 10:37 am Post subject: Re: map::insert() |
|
|
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
|
Posted: Sun Aug 15, 2004 12:59 pm Post subject: Re: map::insert() |
|
|
"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 |
|
 |
|
|
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
|
|