capture d'exceptions

capture d'exceptions - C++ - Programmation

Marsh Posté le 08-03-2003 à 20:26:35    

Voila, dans mon programme j'ai un cas du genre

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class A{
  4. public:
  5.   ~A(){throw 0;}
  6. };
  7. class B:A{
  8. public:
  9.   B():A(){throw 1;}
  10. };
  11. int main(int,char**)
  12. {
  13.   try
  14.     {
  15.       B b;
  16.     } catch (int x)
  17.       { cout << x << endl;}
  18.   return 0;
  19. }


 
Quand on execute le programme, ca génère un coredump.
Comment peut-on capturer les deux exceptions? Ou alors c'est "très mal" de permettre à un destructeur de lancer des exceptions.


Message édité par elrond le 08-03-2003 à 20:27:51
Reply

Marsh Posté le 08-03-2003 à 20:26:35   

Reply

Marsh Posté le 08-03-2003 à 20:42:22    

oui. dans le cas que tu montres, le destructeur est appelé pendant la gestion de l'exception lors du deroulement de la pile, donc cette exception n'est pas attrapée.  
 
edit: std::terminate() st alors appelé puisque l'on considère que l'exception est signe d'une erreur dans la gestion de l'exception
 
voir aussi std::uncaught_exception() qui renvoie true si une exception à été lancée mais pas capturée


Message édité par Taz le 08-03-2003 à 20:46:20
Reply

Marsh Posté le 08-03-2003 à 21:18:14    

Elrond a écrit :

Ou alors c'est "très mal" de permettre à un destructeur de lancer des exceptions.


C'est en effet peu recommandé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed