====== Exceptions ====== Seit der ersten Standardisierung von C++ im Jahr 1989 gibt es mit Exceptions oder zu Deutsch 'Ausnahmen' eine neue Möglichkeit in C++ Fehler zu behandeln. Sie realisieren dabei das Prinzip der Strukturierten Fehlerbehandlung, also der Trennung des normalen Programmablaufs von der Fehlerbehandlung. Eine zentrale Rolle spielt dabei der Begriff der Exception, also ein Objekt das beim Auftreten eines Fehlers erzeugt wird, und alle Informationen über den aufgetreten Fehler beinhaltet. Da Aufgrund fehlender Informationen Fehler oft nicht direkt an der Stelle ihres Auftretens behandelt werden können werden die Exceptions an eine spezielle Fehlerbehandlungsroutine übergeben die ausreichend Kontextinformationen besitzt um den Fehler zu behandeln. Um zu bestimmen welche Fehlerbehandlungsroutine die Richtige ist bedient man sich der sogenannten Blocküberwachung. Dabei kennzeichnet man gewisse Blöcke des Programms, welche auf ineinander verschachtelt sein können, das in ihnen Fehler auftreten können und schreibt im Anschluss an jeden Block, ein oder mehrere Fehlerbehandlungsroutinen für verschiedene Arten von Fehlern. Sollte ein Block einen Fehler nicht bearbeiten können wird er an den umgebenden Block weitergegeben, solange bis entweder ein Block den Fehler behandeln kann oder bis kein umgebender Block mehr vorhanden ist, wobei dann das Programm beendet wird. Das Weiterreichen von Fehlern funktioniert auch über die Grenzen von [[c:func:start|Funktionen]] hinweg, so dass Funktionen die mit dem Fehler nichts anfangen können frei von Code zum Behandeln bzw. Weiterreichen dieses Fehlers bleiben. ===== Einstieg ===== * [[usage-syntax|Verwendung und Syntax]] * [[std|std::exception - Exceptions in der Standardbibliothek]] * [[how|Was passiert wenn eine Exception auftritt?]] => Scott Meyers ===== Themen ===== * [[unhandled|Unbehandelte Exceptions]] * [[double-exception|Exceptions in Exceptions]] * [[constructor|Exceptions im Konstruktor]] - Über Fehler im Konstruktor benachrichtigen * [[guarantee|Ausnahmegarantien]] -> C++0x noexcept(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3051.html) * [[safe-design|Exceptionsicheres Design]] -> zb. copy/assignment mit swap etc. (basic/strong Garantie, nothrow) * [[cpp:std:exception|Standard Exceptions]] * Möglichkeiten: RAII, Scopguards (Mutexes), etc. * [[chaining|Chaining - Weiterleiten und Anreichern mit Informationen]] -> ev. auch http://www.boost.org/doc/libs/1_42_0/libs/exception/doc/boost-exception.html * unexpected() => Programmdaten retten \\ ---- [[http://forum.proggen.org/viewtopic.php?f=39&t=1504|Diskussion]]