C ++ Programmierung: Auslösen von Ausnahmen

Eine C ++ Funktion, die Ressourcen vor Ort zuweist müssen eine Ausnahme zu fangen, einige Verarbeitung zu tun, und es dann den Stapel Kette rethrow auf. Betrachten Sie das folgende Beispiel:

nichtig fileFunc () {ofstream * Pout = new ofstream ( "File.txt") - otherFunction () - löschen pOut-}

Wie viele Programmierer wissen, zugewiesen der Speicher durch neu isn # 8242-t automatisch auf den Heap zurückgegeben. Ob otherFunction () wurden eine Ausnahme zu werfen, die Programmsteuerung würde zu verlassen, ohne den Aufruf löschen, und der Speicher zu Beginn des zugewiesenen fileFunc () wäre verloren.

Um dieses Problem zu vermeiden, fileFunc () kann ein umfassen Fang(...) zu fangen geworfen jede Ausnahme:

nichtig fileFunc () {ofstream * Pout = new ofstream ( "File.txt") - try {otherFunction () - löschen pOut-} catch (...) {löschen pouť-Wurf-}}

In diesem Satz, fileFunc () gibt den Speicher, den sie früher auf den Heap zugeordnet. Es ist jedoch nicht in der Lage, den Rest der Ausnahme zu verarbeiten, weil sie keine Ahnung hat, was schief gelaufen könnte. Es weiß nicht einmal, welche Art von Objekt es gerade gefangen.

Das werfen Stichwort ohne Argumente rethrows die aktuelle Exception-Objekt zurück auf die Kette bis zu einem gewissen Funktion, die den Fehler richtig verarbeiten kann.

Menü