96Fermer98
ZephLe 25/02/2011 à 12:07
./93 :

On est d'accord : l'exception est une bonne idée quand elle reste exceptionnelle (ça semble plutôt logique, ça tombe bien ^^). En revanche, si on prévoit que la proportion d'appels qui génère une exception n'est pas négligeable, vu que c'est quand même presque 100 fois plus lent même avec ton astuce d'exception statique, il vaut mieux choisir une autre méthode.

Accessoirement, comme le "methodThrowsStaticException" réutilise toujours la même exception, on a pas de moyen efficace pour y placer un message personnalisé en fonction du contexte où s'est produite l'exception (genre "la valeur 3 est invalide" au lieu de "valeur invalide"), ce qui limite déjà pas mal l'intérêt d'une exception.
Pen^2 (./94) :
Et j'ai beau ne pas m'y connaître outre mesure en C++, il me semble que les copies cachées (=allocations) sont une des choses qui grèvent les performances.

Théoriquement les copies cachées d'objets conséquents ne réallouent pas les données, elles se contentent de pointer dessus jusqu'à ce qu'on décide d'utiliser la nouvelle instance en écriture, et c'est à ce moment seulement que les données sont dupliquées en mémoire. Il me semble que la STL fonctionne comme ça, à moins que ce ne soit seulement les types proposés par Qt ?

(en tout cas ça reste une bonne pratique de faire comme ça quand on implémente une classe qui utilise des ressources, puisque ça limite beaucoup l'impact des multiples copies d'objet qui ne servent qu'en lecture)