Lever une exception dans un destructeur mène a un comportement indéfini (ton programme se retrouvera dans un état impossible à prédire).
L'appel à std::fstream::close peut lever une exception en cas d'échec http://www.cplusplus.com/reference/iostream/fstream/close/
Donc, laisser l'objet gérer la fermeture du fichier peut mener à un comportement indéfini.
Dans le cas de std::shared_ptr<>::release, c'est moins problématique. En effet, un destructeur devrait être nothrow. Maintenant, imagine le combo :
Si la fermeture du fichier lève une exception pour une raison quelconque, quel sera l'état du programme pour peut qu'on attrape les exceptions quelque part ?
L'intérêt d'un RIAA, c'est que la ressource ne va pas fuiter. Par contre, ça ne garanti pas que le programme va correctement fonctionner si le destructeur n'est pas exception-free.
J'aimerais bien comprendre pourquoi je suis moinsé alors que je corrige une erreur de débutant.
[^] # Re: templates variadiques
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 4.
Wikipedia n'est pas une source.
Je crois que tu ne comprends pas le problème ici.
Lever une exception dans un destructeur mène a un comportement indéfini (ton programme se retrouvera dans un état impossible à prédire).
L'appel à std::fstream::close peut lever une exception en cas d'échec http://www.cplusplus.com/reference/iostream/fstream/close/
Donc, laisser l'objet gérer la fermeture du fichier peut mener à un comportement indéfini.
Dans le cas de std::shared_ptr<>::release, c'est moins problématique. En effet, un destructeur devrait être nothrow. Maintenant, imagine le combo :
Si la fermeture du fichier lève une exception pour une raison quelconque, quel sera l'état du programme pour peut qu'on attrape les exceptions quelque part ?
L'intérêt d'un RIAA, c'est que la ressource ne va pas fuiter. Par contre, ça ne garanti pas que le programme va correctement fonctionner si le destructeur n'est pas exception-free.
J'aimerais bien comprendre pourquoi je suis moinsé alors que je corrige une erreur de débutant.