Exceptions : Interception et suppression des exceptions
L'instruction et les exemples suivants montrent comment intercepter et supprimer des exceptions.Pour plus d'informations sur try, catch, les mots clés et d' throw , consultez Gestion des exceptions C++.
Vos gestionnaires d'exceptions doivent supprimer des objets exception qu'ils gèrent, car le manque de supprimer l'exception provoque une fuite de mémoire chaque fois que ce code intercepte une exception.
Votre bloc de catch doit supprimer une exception lorsque :
Le bloc de catch lève une exception.
Bien sûr, vous ne devez pas supprimer l'exception si vous levez la même exception de nouveau :
catch(CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
L'exécution retourne la valeur du bloc de catch .
[!REMARQUE]
En supprimant CException, utilisez la fonction membre de Delete pour supprimer l'exception.n'utilisez pas le mot clé de suppression , parce qu'il peut échouer si l'exception n'est pas sur le tas.
Pour intercepter et supprimer des exceptions
Utilisez le mot clé de try pour installer un bloc de try .Exécutez toutes les instructions de programme qui pourraient lever une exception dans un bloc de try .
Utilisez le mot clé de catch pour installer un bloc de catch .Le code de gestion des exceptions de placer dans un bloc de catch .Le code dans le bloc de catch est exécuté uniquement si le code dans le bloc de try lève une exception de type spécifié dans l'instruction de catch .
La structure suivante montre comment try et les blocs de 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, d'un contrôle s'exécute au premier bloc de catch dont la déclaration d'exception correspond au type de l'exception.Vous pouvez extraire gérer différents types d'exceptions avec les blocs séquentiels de catch comme répertorié 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 l' exceptions : Convertir des macros d'exception MFC.