1) Pour plus de commodité, j'ai tout mon programme dans un bloc try. De cette façon, je peux lancer une exception à tout moment dans mon code et je sais qu'il sera traité de la même manière. Au fur et à mesure que le programme s'élargira, cette technique causera-t-elle un coup dans la performance?C++ Exception Handling Questions
2) Si les objets sont désaffectés hors champ, pourquoi lancer un objet temporaire est-il valide? .: par exemple
class Error : public std::exception { private: char *m; private: Error(char *l) : m(l) {} virtual char *what() { return m; } }; int main() { try { throw Error("test"); } catch(std::exception &e) { puts(e.what()); return -1; } return 0; }
Dans l'instruction throw, pourquoi ne pas l'objet temporaire devient invalide car il a été déclaré que dans le cadre essayer?
3) Avec les systèmes d'exploitation Windows d'une langue autre que l'anglais, le membre what()
de la classe d'exception STL renvoie-t-il toujours une chaîne char*
? Ou pourrait-il retourner une chaîne wchar_t*
?
Vous ne devriez pas avoir votre programme entier dans un bloc try. Si vous obtenez une erreur, tout votre programme se termine plutôt que de vous permettre de le gérer avec élégance et de continuer. Ce genre défait le but des exceptions. – JoshD
Je ne suis pas d'accord, si vous consignez des informations significatives de l'exception à ce niveau, alors il est parfaitement valide. Cela vous donne une meilleure information que si std :: terminate était appelé, ce qui arrive si l'exception n'est pas interceptée. – radman
@JoshD dans certaines zones de mon code, je pourrais avoir plus de blocs try-catch, avec lesquels je pourrais gérer avec élégance les exceptions. Le premier bloc try-catch serait de gérer les erreurs fatales où le programme ne pourrait pas continuer plus loin. – kaykun