Le C++ offre un mécanisme de gestion des erreurs efficace. Habituellement, en cas d'erreur, le programme affiche un message et se termine plus ou moins proprement. Cela n'est malheureusement pas toujours satisfaisant surtout lorsque l'erreur est rattrapable. L'idée du mécanisme du C++ est, en cas d'erreur, de construire un objet contenant des informations sur l'erreur et de le lancer. Une fonction peut alors attraper l'objet et essayer de supprimer l'erreur. Si cette fonction n'y parvient pas, elle peut alors renvoyer l'objet, modifié ou non, ou mettre fin au programme. Par défaut, c'est à dire si aucune fonction ne peut supprimer l'erreur, cette dernière solution est adoptée, avec l'appel des fonctions unexpected, terminate, et enfin abort.
En C++, le lancement d'un objet se fait par: throw objet. L'objet peut alors être attrapé s'il existe un bloc try englobant l'endroit du programme où l'objet a été lancé, et s'il existe une fonction, déclarée avec catch après le bloc try, et prenant enfin comme argument un objet du type de l'objet lancé.
Schématiquement, la gestion des erreurs se fait ainsi:
Il est possible d'avoir plusieurs catch avec des types d'objets différents afin de gérer plusieurs erreurs. Il est également possible de lancer une exception à l'intérieur d'un catch. Il y aura alors recherche d'un catch pouvant traiter l'objet. Si aucun catch n'a le bon type d'argument, le programme se termine.