Video: 038 C Exception Handling Try Throw Catch 2024
Eine C ++ - Funktion, die Ressourcen lokal zuweist, muss möglicherweise eine Exception abfangen, etwas verarbeiten und sie dann in der Stack-Kette wieder hochladen. Betrachten Sie das folgende Beispiel:
void fileFunc () {ofstream * pOut = new ofstream ("Datei. Txt"); andereFunktion (); delete pOut;}
Wie viele Programmierer wissen, wird der von new zugewiesene Speicher nicht automatisch an den Heap zurückgegeben. Wenn otherFunction () eine Exception auslösen würde, würde control das Programm beenden, ohne delete aufzurufen, und der am Anfang von fileFunc () zugewiesene Speicher würde verloren gehen.
Um dieses Problem zu vermeiden, kann fileFunc () einen catch (…) enthalten, um jede ausgelöste Ausnahme zu fangen:
void fileFunc () {ofstream * pOut = new ofstream ("Datei. Txt"); try {andereFunktion (); lösche pOut;} catch (…) {lösche pOut; throw;}}
Innerhalb dieser Phrase gibt fileFunc () den Speicher zurück, den es zuvor dem Heap zugewiesen hat. Es ist jedoch nicht in der Lage, den Rest der Ausnahme zu verarbeiten, weil es keine Ahnung hat, was schiefgehen könnte. Es weiß nicht einmal, um welche Art von Objekt es sich gerade handelt.
Das throw-Schlüsselwort ohne Argumente bewirkt, dass das aktuelle Ausnahmeobjekt die Kette wieder in eine Funktion zurücksetzt, die den Fehler ordnungsgemäß verarbeiten kann.