• [^] # Re: templates variadiques

    Posté par (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 :

    std::shared_ptr<std::ifstream> pif(new std::ifstream("a_file")) ;
    
    

    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.