Gestion d'erreur
En C, pour gérer des erreurs, nous n’avions d’autre choix que de renvoyer quelque chose de spécial. Un , un NULL, des valeurs qu’il fallait vérifier et qui se font très souvent ignorer au risque d’un SEGV.
En C++ quand on a une erreur on va utiliser throw. C’est un mot clé qui interrompt la fonction en cours et toute les autres jusqu’à ce qu’il y en a une qui réceptionne la donné qui a été throw.
Pour réceptionner une donnée throw il faut utiliser try et catch. Si quelque chose throw dans le bloc try alors on a une chance de l’attraper dans le catch, seulement si le type de ce qui a été throw est compatible avec celui que l’on a écrit dans le catch.
int failing_function(void)
{
throw 12;
}
int main(void)
{
try {
failing_function();
std::cout << "Hello from after the func\n";
} catch (int a) {
std::cerr << "caught " << a << "\n";
}
}
Techniquement, on peut throw n’importe quoi. Mais en pratique on utilise des classes d’erreurs. La bibliothèque standard throw des objets qui héritent de std::exception. Ils peuvent être catch comme ceci :
try {
// [...]
} catch (std::exception &err) {
std::cerr << "got an error " << err.what() << "\n";
}