Dat kan zo een aantal niveaus doorgaan en vereist een nauwkeurige administratie om ervoor te zorgen dat je uiteindelijk nog weet wat er op welke plaats fout ging en hoe je dat het beste kunt oplossen.
Exception handling in C++ is een mechanisme om fouten of gebeurtenissen af te handelen op de plaats waar ze het beste afgehandeld kunnen worden. Exceptions gaan dan ook buiten de normale programma-flow om.
Het idee is dat je op de plaats waar een situatie optreedt die speciale aandacht vereist (meestal een fout) een exception opgooit. Die exception reist dan langs een aantal zogenaamde 'exception handlers' die je van tevoren hebt klaargezet. Een exception handler is een stukje programma dat uitgevoerd wordt wanneer er een bepaald type exception langs komt. Hierin kan bijvoorbeeld de fout afgehandeld of opgelost worden of een nieuwe poging gedaan worden.
Zo lang de exception die je hebt opgegooid geen exception handler tegenkomt die op die specifieke exception staat te wachten reist de exception verder tot er een handler reageert of tot hij bovenaan de exception tree is.
In het catch-blok wordt de fout afgehandeld.
Exceptions zijn niet altijd nuttig of nodig. Wanneer gebruik je ze ?
Een groot voordeel is dat destructoren van objecten die je op allerlei niveaus hebt gemaakt netjes worden aangeroepen omdat je telkens netjes een blok (scope) verlaat. Bij een longjmp of exit is dat niet zo.
Een voordeel boven het werken met return-waarden is dat het nogal wat administratie kan uitsparen. Bovendien wordt een bepaalde fout automatisch op het juiste niveau afgehandeld.