« Programmation C++/Les exceptions » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 104 :
 
Une déclaration avec clause <code>throw</code> limite donc les types d'exception que la fonction peut lancer.
Toute tentative de lancer un autre type d'exception est détectédétectée à l'exécution et provoque l'appel de la fonction <code>std::terminate()</code>, puis l'arrêt immédiat du programme. Ce comportement est spécifique au C++, et amène souvent les développeurs remplacer cette clause par une simple documentation.
 
LDe plus, l'utilisation de la clause <code>throw</code> reste rare car rend les pointeurs de fonctions incompatibles s'ils ne possèdent pas une clause couvrant les types lancés par la fonction pointée.
 
Il est possible de fournir sa propre fonction <code>terminate()</code> appelée en cas d'exception non attrapée, grâce à <code>std::set_terminate()</code>.
 
<source lang="cpp">
#include <exception>
#include <iostream>
void maTerminate()
{
std::cout << "Si vous en etes la, vous etes mal." << std::endl;
}
int main()
{
std::set_terminate(maTerminate); // On fourni sa propre fonction
std::terminate(); // Et on termine le programme.
return 0;
}
</source>
 
<!-- à compléter: