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.

HinweisHinweis

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.

Siehe auch

Konzepte

Ausnahmebehandlung in MFC