Ausnahmen: Abfangen und Löschen von Ausnahmen
Die folgenden Anweisungen und Beispiele zeigen, wie Ausnahmen abfängt und gelöscht werden. Weitere Informationen zu try finden, catch und throw, Schlüsselwörter C++-Ausnahmebehandlung.
Ausnahmehandler die müssen Ausnahmeobjekte löschen, die es verarbeiten, da Fehler, die Ausnahme zu löschen einen Speicherverlust verursacht, wenn dieser Code eine Ausnahme abgefangen.
Das catch-Block müssen Ausnahmen löschen, wenn:
Der catch-Block wird eine neue Ausnahme aus.
Natürlich dürfen Sie die Ausnahme nicht löschen, wenn Sie die gleiche Ausnahme erneut auslösen:
catch(CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
Ausführungsrückgaben aus dem catch-Block.
Hinweis
Wenn Sie das CException löschen, verwenden Sie die Löschen-Memberfunktion, um die Ausnahme zu löschen.Verwenden Sie nicht das löschen-Schlüsselwort, da er fehlschlägt kann, wenn die Ausnahme nicht im Heap befindet.
Um Ausnahmen abfangen und löschen
Verwenden Sie das try-Schlüsselwort, um einen Block try zu installieren. Führen Sie alle Programmanweisungen aus, die möglicherweise eine Ausnahme innerhalb eines try-Blocks ausgelöst hat.
Verwenden Sie das catch-Schlüsselwort, um einen Block catch zu installieren. Platzausnahmebehandlungscode in einem catch-Block. Der Code im Block catch wird nur ausgeführt, wenn der Code innerhalb des try-Blocks eine Ausnahme des Typs ausgelöst, der in der catch-Anweisung angegeben wird.
Das folgende Skelett zeigt, wie try und catch werden Blöcke normalerweise angeordnet werden:
try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch( CException* e ) { // Handle the exception here. // "e" contains information about the exception. e->Delete(); }
Wenn eine Ausnahme ausgelöst wird, die Steuerung dem ersten catch-Block, dessen AusnahmeDeklaration den Ausnahmetyp übereinstimmt. Sie können verschiedene Typen von Ausnahmen mit sequenziellen catch Blöcken selektiv behandeln, wie unten aufgeführt:
try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch( CMemoryException* e ) { // Handle the out-of-memory exception here. e->Delete(); } catch( CFileException* e ) { // Handle the file exceptions here. e->Delete(); } catch( CException* e ) { // Handle all other types of exceptions here. e->Delete(); }
Weitere Informationen finden Sie unter Ausnahmen: Konvertieren von MFC-Ausnahme-Makros.