Grosse parenthèse: close lèvera une exception uniquement si le flux est configuré pour lever des exceptions. Ce n'est pas le défaut.
Petite parenthèse, c'est RAII, pas RIAA (c'est pas l'asso de majors du disque ça ?), voire même RRIF (Resource Release is Finalization) si on veut se la jouer pédantique et confiner le RAII à son emploi premier. Bref.
Dans l'absolu tu as raison. Il y a un risque en cas de restitution problématique de ressource quand un échec est plausible. C'est pour cela qu'il est exigé qu'un destructeur ne doive jamais lever d'exception. Et encore, il me semble avoir vu des changements à ce sujet dans le prochain standard. Il faudrait que je remette la main dessus.
Maintenant, le "je ne peux pas fermer le fichier/la socket", honnêtement, cela passe toujours à la trappe, car même si on ne peut pas le fermer, on ne peut rien en faire non plus, et je ne connais pas de programme qui le gère correctement, même avec codes de retour. Des noyaux/bibliothèques peut-être pour faire remonter l'information jusqu'à l'appelant, qui bien souvent n'en fera rien.
Mon expérience est qu'ignorer une restitution refusée est généralement moins grave (et encore moins probable) que de laisser s'échapper une ressource. D'où que : le RAII suffit amplement. Que les débutants commencent par apprendre à s'en servir, on passera à l'étape suivante après.
[^] # Re: templates variadiques
Posté par lmg HS (site web personnel) . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 4.
Grosse parenthèse: close lèvera une exception uniquement si le flux est configuré pour lever des exceptions. Ce n'est pas le défaut.
Petite parenthèse, c'est RAII, pas RIAA (c'est pas l'asso de majors du disque ça ?), voire même RRIF (Resource Release is Finalization) si on veut se la jouer pédantique et confiner le RAII à son emploi premier. Bref.
Dans l'absolu tu as raison. Il y a un risque en cas de restitution problématique de ressource quand un échec est plausible. C'est pour cela qu'il est exigé qu'un destructeur ne doive jamais lever d'exception. Et encore, il me semble avoir vu des changements à ce sujet dans le prochain standard. Il faudrait que je remette la main dessus.
Maintenant, le "je ne peux pas fermer le fichier/la socket", honnêtement, cela passe toujours à la trappe, car même si on ne peut pas le fermer, on ne peut rien en faire non plus, et je ne connais pas de programme qui le gère correctement, même avec codes de retour. Des noyaux/bibliothèques peut-être pour faire remonter l'information jusqu'à l'appelant, qui bien souvent n'en fera rien.
Mon expérience est qu'ignorer une restitution refusée est généralement moins grave (et encore moins probable) que de laisser s'échapper une ressource. D'où que : le RAII suffit amplement. Que les débutants commencent par apprendre à s'en servir, on passera à l'étape suivante après.