20Fermer
ZephLe 20/11/2011 à 14:21
Folco (./18) :
Merci Zeph ; par contre, j'ai lu du mal de l'interception d'exceptions par pointeur. Malheureusement, je ne pige rien à toutes ces finesses du C++, j'ai déjà du mal à maitriser les mécanismes de base, alors là ça sort de mes cordes : http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.14

Mouais, je trouve leur justification et leur exemple un peu bidons. Bien sûr que si tu t'amuses à lancer des exceptions de même type parfois sur la pile et parfois sur le tas, tu vas finir par te retrouver dans des situations où tu ne sais plus s'il faut libérer ou non. Mais c'est complètement débile, personne ne va se tirer une balle dans le pied comme ça (et quelqu'un le fait, je pense qu'il n'a pas attendu les exceptions pour s'inventer des problèmes).

À partir du moment où tu restes cohérent avec toi-même, je ne vois pas pourquoi lancer des exceptions par pointeur serait globalement mieux ou moins bien que de les lancer par référence.

En revanche, il y a des cas particuliers où l'une ou l'autre solution peut sembler mieux adaptée. Prenons pour exemple une exception qui contient un message d'erreur perso que tu as mis en forme au moment où l'exception a été construite (donc un message non constant). Si tu la lances par référence, tu vas être obligé de définir l'opérateur par copie, et de mettre en place soit un mécanisme de pointeur partagé soit de copier intégralement le message d'erreur, sinon chaque copie de l'exception va essayer de le libérer à la destruction, et forcément à partir de la 2eme ça va planter. Dans les deux cas, c'est coûteux, et il me semble plus simple de lancer un pointeur et de ne le libérer qu'une fois, sans se prendre la tête avec des histoires de copie.

(bon l'exemple n'est pas forcément bien choisi puisqu'on pourrait mettre le message dans une std::string, il me semble que justement elles sont paresseuses par défaut et partagent le pointeur tant que la chaîne n'est pas modifiée ; mais bref, l'idée reste la même)

[edit] En fait y'a pas mal de trucs sur ton site que je trouve complètement péremptoires, le mec prend un exemple arbitraire pour exposer sa théorie et la fait passer pour une vérité universelle, quand le problème s'applique parfois à des contextes bien plus variables que ce qu'il laisse entendre. C'est dommage parceque c'est une source d'information intéressante, mais j'ai du mal à lire les textes de gens persuadés de détenir l'unique solution.