Hi Saskia
))
Es gibt bei „try“ zwei etwas besondere Fälle. Vermutlich ist einer von beiden bei dir der Grund für die nicht-gefangene Exception.
Der erste Fall ist ein „try“ innerhalb eines Konstruktors. Der Konstruktor stellt ja Speicherbereiche für ein Klassenobjekt zur Verfügung, die nach einem fehlgeschlagenen „try“ aber nirgendwo mehr gelöscht werden (der Destruktor wird ja nie aufgerufen). Einige Compiler behandeln eine Exception innerhalb eines Konstruktors daher gnadenlos mit dem Aufruf von „terminate()“. Nunja, auf jeden Fall ist es sinnvoll, auf „try“ in Konstruktoren zu verzichten!
Der zweite Fall ist, dass innerhalb deines „try“-Blocks eine andere Exception geworfen wird als du eigentlich erwartest. Setz doch einfach mal hinter deinen eigentlichen „catch“-Block einen „catch(…)“-Block. Dieser fängt dann alle Exceptions, die du selber nicht beachtet hast. Ich schreibe z.B. hinter jeden „catch()“-Block einen solchen „catch(…)“-Block:
catch(...) {
assert(NULL=="!!! Nobody wanna catch me !!!!");
}
Das hat mir schon einige seltsame Programm-Terminierungen erspart, denn eine nicht-gefangene Exception führt ja bekanntlich zum Aufruf von „terminate()“ …
cu Stefan.