En remplacant os.str("x") par os.str(""), tout rentre dans l'ordre.
Alors ? mauvais compilo, changer de compilo ?
ou bien mauvais programmeur, changer de programmeur ?
Samuel Krempp wrote in message news:<3f78714c$0$27568$...
Euh, c'est un ostringstream, pas un ostrstream.....
même un strstream, faut pas désallouer la 'controlled input sequence', sur laquelle pointe str(). C'est le strstreambuf qui gère sa mémoire.
Pas exactement. Si le strstate du strstreambuf est 'frozen', son destructeur ne libèrera pas la 'controlled input sequence'. Il faut soit libérer la 'controlled input sequence' à la main, soit explicitement le défriser.
Dans ce cas, le destructeur du strstreambuf ne libèrera pas son buffer. Il faut soit ajouter delete[] buff; ou ostr.rdbuf()->freeze(0);
Bertrand.
Samuel Krempp <krempp@crans.truc.en.trop.ens-cachan.fr> wrote in message news:<3f78714c$0$27568$626a54ce@news.free.fr>...
Euh, c'est un ostringstream, pas un ostrstream.....
même un strstream, faut pas désallouer la 'controlled input sequence', sur
laquelle pointe str(). C'est le strstreambuf qui gère sa mémoire.
Pas exactement.
Si le strstate du strstreambuf est 'frozen', son destructeur ne
libèrera pas la 'controlled input sequence'. Il faut soit libérer la
'controlled input sequence' à la main, soit explicitement le défriser.
Samuel Krempp wrote in message news:<3f78714c$0$27568$...
Euh, c'est un ostringstream, pas un ostrstream.....
même un strstream, faut pas désallouer la 'controlled input sequence', sur laquelle pointe str(). C'est le strstreambuf qui gère sa mémoire.
Pas exactement. Si le strstate du strstreambuf est 'frozen', son destructeur ne libèrera pas la 'controlled input sequence'. Il faut soit libérer la 'controlled input sequence' à la main, soit explicitement le défriser.
Dans ce cas, le destructeur du strstreambuf ne libèrera pas son buffer. Il faut soit ajouter delete[] buff; ou ostr.rdbuf()->freeze(0);
Bertrand.
Samuel Krempp
le Tuesday 30 September 2003 15:19, écrivit :
C'est pour ça en général qu'une fois qu'on a fini avec le pointeur, on fait un coup de freeze( 0 ), pour déverouiller les buffers et en répasser la gestion à strstreambuf.
ah oui c'est vrai. désallouer str m'a choqué car personnellement j'ai simplement pris l'habitude d'enlever le freeze après l'utilisation de str(). ça revient au même pour la destruction (mais enlever le freeze est plus général, il permet de continuer d'utiliser le strstream, etc) même si laisser le freeze et désallouer est correcte, je préfère me fixer comme règle de toujours enlever le freeze après usage. Enfin, pour le peu que j'utilise des strstream, ça change pas grand chose.
A ce propos, y-a-t il des projets de rempalcer strstream (qui est deprecated) ? Même avec stringstream, on peut avoir besoin d'une classe comme strstream, avec la possibilité de voire une chaîne en tant que stream et vice versa sans faire de copies.
-- Sam
le Tuesday 30 September 2003 15:19, kanze@gabi-soft.fr écrivit :
C'est pour ça en général qu'une fois qu'on a fini avec le pointeur, on
fait un coup de freeze( 0 ), pour déverouiller les buffers et en
répasser la gestion à strstreambuf.
ah oui c'est vrai. désallouer str m'a choqué car personnellement j'ai
simplement pris l'habitude d'enlever le freeze après l'utilisation de
str(). ça revient au même pour la destruction (mais enlever le freeze est
plus général, il permet de continuer d'utiliser le strstream, etc)
même si laisser le freeze et désallouer est correcte, je préfère me fixer
comme règle de toujours enlever le freeze après usage.
Enfin, pour le peu que j'utilise des strstream, ça change pas grand chose.
A ce propos, y-a-t il des projets de rempalcer strstream (qui est
deprecated) ? Même avec stringstream, on peut avoir besoin d'une classe
comme strstream, avec la possibilité de voire une chaîne en tant que stream
et vice versa sans faire de copies.
C'est pour ça en général qu'une fois qu'on a fini avec le pointeur, on fait un coup de freeze( 0 ), pour déverouiller les buffers et en répasser la gestion à strstreambuf.
ah oui c'est vrai. désallouer str m'a choqué car personnellement j'ai simplement pris l'habitude d'enlever le freeze après l'utilisation de str(). ça revient au même pour la destruction (mais enlever le freeze est plus général, il permet de continuer d'utiliser le strstream, etc) même si laisser le freeze et désallouer est correcte, je préfère me fixer comme règle de toujours enlever le freeze après usage. Enfin, pour le peu que j'utilise des strstream, ça change pas grand chose.
A ce propos, y-a-t il des projets de rempalcer strstream (qui est deprecated) ? Même avec stringstream, on peut avoir besoin d'une classe comme strstream, avec la possibilité de voire une chaîne en tant que stream et vice versa sans faire de copies.