Uitzonderingen: Uitzonderingen vangen en verwijderen

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

In de volgende instructies en voorbeelden ziet u hoe u uitzonderingen kunt ondervangen en verwijderen. Voor meer informatie over de try, catch, en throw trefwoorden, zie de best practices voor moderne C++ voor uitzonderingen en foutafhandeling.

Uw uitzonderingshandlers moeten uitzonderingsobjecten verwijderen die ze verwerken, omdat het verwijderen van de uitzondering een geheugenlek veroorzaakt wanneer die code een uitzondering onderschept.

Uw catch blok moet een uitzondering verwijderen wanneer:

  • Het catch blok genereert een nieuwe uitzondering.

    Natuurlijk moet u de uitzondering niet verwijderen als u dezelfde uitzondering opnieuw genereert:

    catch (CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else
          e->Delete();
    }
    
  • Uitvoering wordt geretourneerd vanuit het catch blok.

Opmerking

Wanneer u een CExceptionuitzondering verwijdert, gebruikt u de Delete lidfunctie om de uitzondering te verwijderen. Gebruik het delete trefwoord niet, omdat het kan mislukken als de uitzondering zich niet op de heap bevindt.

Uitzonderingen vangen en verwijderen

  1. Gebruik het try trefwoord om een try blok in te stellen. Voer alle programma-instructies uit die een uitzondering binnen een try blok kunnen genereren.

    Gebruik het catch trefwoord om een catch blok in te stellen. Plaats uitzonderingsafhandelingscode in een catch blok. De code in het catch blok wordt alleen uitgevoerd als de code in het try blok een uitzondering genereert van het type dat is opgegeven in de catch instructie.

    In het volgende skelet ziet u hoe try en catch blokken normaal worden gerangschikt:

    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();
    }
    

    Wanneer er een uitzondering wordt gegenereerd, wordt het besturingselement doorgegeven aan het eerste catch blok waarvan de uitzonderingsdeclaratie overeenkomt met het type uitzondering. U kunt selectief verschillende soorten uitzonderingen verwerken met sequentiële catch blokken, zoals hieronder wordt vermeld:

    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();
    }
    

Zie Uitzonderingen: Converteren van MFC-uitzonderingsmacro's voor meer informatie.

Zie ook

afhandeling van uitzonderingen