Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

stringstream et exception.

2 réponses
Avatar
Goth
J'ai le code suivant :

void IoXML::openFile(const std::string &name)
{
xmlNodePtr model;

if((m_doc = xmlParseFile(name.c_str())) == NULL) {
std::stringstream s;
s << "Error on parse file " << name.c_str() << std::endl;
throw s.str();
}
...
}


J'aimerais savoir si je ne crée pas une fuite de mémoire avec la
stringstream ?

Est ce qu'il faudrait mieux faire un :

...
throw std::string(s.str());
...

Sinon si vous avez une meilleure idée pour gérer les erreurs (if faut
gérer les erreurs dans les boîtes de dialogue et ou la console) je suis tout
ouï !

Merci d'avance.

2 réponses

Avatar
Bertrand Motuelle
"Goth" schrieb im Newsbeitrag
news:
J'ai le code suivant :

[...]

std::stringstream s;
s << "Error on parse file " << name.c_str() << std::endl;
throw s.str();
[...]


J'aimerais savoir si je ne crée pas une fuite de mémoire avec la
stringstream ?


Non, c'est correct. Pour cet usage std::ostringstream est suffisant.

Est ce qu'il faudrait mieux faire un :
throw std::string(s.str());


C'est redondant. La fonction str() de stringstream retourne un std::string
(contrairement à strstream).

Sinon si vous avez une meilleure idée pour gérer les erreurs (if faut
gérer les erreurs dans les boîtes de dialogue et ou la console) je suis
tout

ouï !


Il y a un tas de moyens de gérer les erreurs.
Concernant les exceptions, tu devrais peut-être créer ta propre d'exception
plutôt que de lancer des std::string.
(c'est un peu particulier de faire un catch(std::string&)).
Il est assez courant de dériver une classe/hiérachie de classe de
std::exception qui encaspulera le contexte de l'exception (origine,
sévéritée, message, pile d'appel...).
A toi de determiner ce dont tu as besoin exactement.

Bertrand

Avatar
Goth
Le Thu, 24 Jul 2003 22:18:47 +0200, Bertrand Motuelle a écrit :

"Goth" schrieb im Newsbeitrag
news:
[texte rapporté caché]
[...]

[texte rapporté caché]
[...]


[texte rapporté caché]


Non, c'est correct. Pour cet usage std::ostringstream est suffisant.

[texte rapporté caché]


C'est redondant. La fonction str() de stringstream retourne un std::string
(contrairement à strstream).

[texte rapporté caché]
tout

[texte rapporté caché]


Il y a un tas de moyens de gérer les erreurs.
Concernant les exceptions, tu devrais peut-être créer ta propre d'exception
plutôt que de lancer des std::string.
(c'est un peu particulier de faire un catch(std::string&)).
Il est assez courant de dériver une classe/hiérachie de classe de
std::exception qui encaspulera le contexte de l'exception (origine,
sévéritée, message, pile d'appel...).
A toi de determiner ce dont tu as besoin exactement.

Bertrand



C'est ce que j'étais en train de penser en fait...
J'écris une classe pour voir et on en reparle après :)

Merci.