Partager via


exceptions : Interception et supprimant des exceptions

L'instruction et les exemples suivants indiquent comment intercepter et supprimer des exceptions. Pour plus d'informations sur try, catch, et les mots clés throw, consultez Gestion des exceptions C++.

Les gestionnaires d'exceptions peuvent supprimer des objets d'exception qu'ils gèrent, car l'échec de la suppression de l'exception provoque une fuite de mémoire lorsque ce code d'intercepte une exception.

Le bloc catch doit supprimer une exception lorsque :

  • Le bloc catch lève une exception.

    Naturellement, vous ne devez pas supprimer l'exception si vous levez la même exception à nouveau :

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e 
       else 
          e->Delete();
    }
    
  • L'exécution retourne depuis le bloc catch.

Notes

En supprimant une CException, utilisez la fonction membre Supprimer pour supprimer l'exception.N'utilisez pas le mot clé supprimer, car il peut échouer si l'exception ne se trouve pas sur le tas.

Pour repérer et supprimer des exceptions

  • Utilisez le mot clé try pour installer un bloc try. Exécutez les instructions de programmation qui peuvent lever une exception dans un bloc try.

    Utilisez le mot clé catch pour installer un bloc catch. Placez le code de gestion des exceptions dans un bloc catch. Le code dans le bloc catch n'est exécuté que lorsque le code dans le bloc try lève une exception du type spécifié dans l'instruction catch.

    La structure suivante montre comment try et les blocs catch sont normalement réorganisés :

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

    Lorsqu'une exception est levée, le contrôle est passé au premier bloc catch dont la déclaration d'exception correspond au type de l'exception. Vous pouvez sélectivement gérer différents types d'exceptions dans les blocs catch séquentiels comme indiqué ci-dessous :

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

Pour plus d'informations, consultez Exceptions : Conversion de macros d'exception MFC.

Voir aussi

Concepts

gestion des exceptions dans MFC