Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les instructions et exemples suivants vous montrent comment intercepter et supprimer des exceptions. Pour plus d’informations sur les mots clés try, catch et throw, consultez les meilleures pratiques modernes en C++ pour les exceptions et la gestion des erreurs.
Vos gestionnaires d’exceptions doivent supprimer les objets d’exception qu’ils gèrent, car l’échec de la suppression de l’exception provoque une fuite de mémoire chaque fois que ce code intercepte une exception.
Votre catch bloc doit supprimer une exception lorsque :
Le bloc
catchlève une nouvelle exception.Bien sûr, vous ne devez pas supprimer l’exception si vous lèvez à nouveau la même exception :
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }L’exécution retourne depuis le bloc
catch.
Remarque
Lors de la suppression d’un CException, utilisez la Delete fonction membre pour supprimer l’exception. N’utilisez pas le mot clé delete, car il peut échouer si l’exception n’est pas sur le tas.
Pour intercepter et supprimer des exceptions
Utilisez le
trymot-clé pour configurer untrybloc. Exécutez les instructions de programme qui pourraient lever une exception dans un bloctry.Utilisez le
catchmot-clé pour configurer uncatchbloc. Placez le code de gestion des exceptions dans uncatchbloc. Le code ducatchbloc est exécuté uniquement si le code dans letrybloc lève une exception du type spécifié dans l’instructioncatch.Le squelette suivant montre comment les blocs
tryetcatchsont normalement 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 passe au premier
catchbloc dont la déclaration d’exception correspond au type de l’exception. Vous pouvez gérer de manière sélective différents types d’exceptions avec des blocs séquentielscatch, 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 à partir de macros d’exception MFC.