Hallo, ich überlege seit einiger Zeit wie genau bei C++ Programmen das Exception Handling realisiert wird. Damit meine ich, wie genau es funktioniert, dass der richtige catch-Block aufgerufen wird, nachdem eine Exception "geworfen" wurde? Ein kleines Beispiel:
try{
throw(5);
}catch(float f){
}catch(int i){
}
Das Einfachste wäre es ja nun, wenn die throws fest mit den entsprechenden catch-Blöcken verdratet wären, aber das geht ja schonmal aus dem Grunde nicht, da es ja auch "unerwartete" Exceptions gibt (wie zB Divison durch 0).
Meine Vorstellung wäre nun, dass beim Eintritt in den Try-Block eine Liste mit allen Exception-Typen, die gefangen werden sollen, angelegt wird (hier float und int (für die, die es nicht wissen, man kann auch primitive Datentypen "werfen", nicht nur Exception-Objekte)) und zusätzlich zum Typ die Adresse des Behandlungsblocks. Wenn nun ein throw auftritt wird diese Liste durchgeschaut und der entsprechende Block aufgerufen (falls vorhanden). Aber nun ist die Frage (falls dies so gemacht wird), ob diese Liste vom Programm, oder vom Betriebssystem verwaltet wird, da dieses ja auch Exceptions wirft, wenn das Programm mist baut (wie zB bei Division durch 0). Außerdem werden die Exceptions ja über ihren Datentyp auseinandergehalten, wie aber geschieht das zur Laufzeit? Ich meine C++ ist ja nicht Java, wo jedes Objekt seinen Typ weiß...
Hat irgendwer da eine Idee, oder auch eine Webadresse (alles was ich gefunden habe erklärt lediglich die Benutzung von Exceptions)?
MM