Citation :
ah ouais? ok, je vais vous expliquer pourquoi il est essentiel de capturer les exceptions par const référence.
1) pour le polymorphisme! rappelez vous que la grande majorité des exceptions sont basées tot ou tard sur une classe mère, le plus souvent au plus bas niveua sur std::exception. si vous capturez par valeur, vous risquez vraisemblablement de perdre de l'information, puis que par définition, quand on catch, on essaye de ramasser ce qu'on peut, on n'a aucune assurance sur ce qui arrive
2) pour empecher que l'exception génère elle meme une exception! pour cela, la plus part des fonctions membres des exceptions sont const et surtout marquer comme ne lançant pas d'exception. il faut suivre ce contrat qui est un gage de sécurité. le problème si on attrape par valeur, c'est que la copie d'un objet peut générer une exception, notemment si on est dans une situation de bad_alloc, tout peut arriver.
donc on doit capturer les exceptions par const référence pour des raisons d'efficacité et de sécurité. si on ne le fait pas, la gestion est bancale et posera problème tot ou tard. le 2eme point vous parait peut etre parano, pourtant il est tout aussi important que le premier.
|