Bonjour,
j'essaie de lancer et capturer la bonne exception en enveloppant un code C qui appelle fopen.
Concrètement, j'ai une classe pour gérer un type de fichier, disons File (admettant pour donnée membre un pointeur sur FILE nommé content_) dont le constructeur s'écrit
Je fais appel à ce constructeur pour un fichier n'existant pas, en tentant de capturer l'exception que je lance dans le constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 File::File(std::string const & filename) : content_(fopen(filename.c_str(), "r")) { if(!content_) throw new std::ios_base::failure("Unable to open the specified file"); }
Malheureusement, je n'attrape pas l'exception avec cette ligne de code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 try { File * does_not_exist = new File("Does not exist"); } catch(std::ios_base::failue const & e) { std::cout << e.what() << std::endl; }
En revanche, si je remplace mon appel à catch par catch(...), une exception est bien attrapée.
Est-ce que vous sauriez pourquoi?
EDIT : cela ne fonctionne pas non plus si j'essaie d'attraper une instance de std::exception.
Merci!
Partager