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
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");
  }
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
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;
  }
Malheureusement, je n'attrape pas l'exception avec cette ligne de code.
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!