Freigeben über


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.

Siehe auch

Konzepte

Ausnahmebehandlung in MFC