Ausnahmen: Ausnahmen abfangen und Löschen
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++-Ausnahme-behandeln.
Die Ausnahmehandler müssen Ausnahmeobjekte löschen, die sie behandeln, da Wenn die Ausnahme verursacht einen Speicherverlust zu löschen, wenn dieser Code eine Ausnahme abgefangen.
Der catch-Block muss eine Ausnahme löschen:
Der Block catch wird eine neue Ausnahme aus.
Natürlich müssen 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(); }
Die Ausführung wird aus dem catch-Block zurück.
Hinweis |
---|
Wenn Sie CException löschen, verwenden Sie die Löschen-Memberfunktion, um die Ausnahme zu löschen.Verwenden Sie nicht das Schlüsselwort delete fehlgeschlagen, weil es kann, wenn die Ausnahme nicht auf dem Heap befindet. |
Um Ausnahmen abfangen und Löschen
Verwenden Sie das try-Schlüsselwort, um einen try-Block zu installieren.Führen Sie alle Programm Anweisungen aus, die möglicherweise eine Ausnahme innerhalb eines try-Block ausgelöst hat.
Verwenden Sie das catch-Schlüsselwort, um einen catch-Block zu installieren.Abstand ausnahmebehandlungs von Code in einem catch-Block.Der Code im catch-Block wird nur ausgeführt, wenn der Code innerhalb des try-Block eine Ausnahme des Typs auslöst, der in der catch-Anweisung angegeben ist.
Das folgende Skelett zeigt, wie try und catch 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, übergibt die Steuerung an die erste catch-Block, dessen Ausnahme Deklaration den Ausnahmetyp übereinstimmt.Sie können verschiedene Arten von Ausnahmen mit sequenziellen catch selektiv Blöcke behandeln, wie im Folgenden 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: Klicken Sie im MFC-Ausnahme-Makros konvertieren.