C++ : ​La gestion des erreurs avec les exceptions

Utiliser les exceptions standards

Testez gratuitement nos 1302 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Ayez une vision exhaustive des exceptions standards disponibles. Il s'agit de gérer aisément les erreurs les plus courantes dans vos programmes.
04:53

Transcription

Avant de voir comment déclencher les exceptions, nous allons passer en revue les exceptions disponibles dans le langage. Théoriquement le C++ permet de déclencher des exceptions de n'importe quel type, y compris des entiers ou des chaînes de caractères. Mais il est recommandé de suivre le modèle des librairies standard. C'est-à-dire qu'il vaut mieux hériter de std exception ou encore mieux de runtime_error si c'est une erreur d’exécution, ou de logic_errοr si c'est une erreur de logique. Pour ce qui est des exceptions type bad_* au centre, on va voir un peu plus loin à quoi elles correspondent. Commençons par les erreurs d’exécution standard dérivées des runtime_errors. On en a cinq, range_error concerne les problèmes de résultats de calcul qui sortent de l'intervalle, regex_error concerne un problème dans l’interprétation d'une expression régulière, overflow_error, quand une donnée dépasse les limites, est beaucoup trop grande, par exemple pour un calcul sur des réels, une underflow_error toujours sur, par exemple, un calcul de réels, la valeur est vraiment trop petite pour être représentée. Enfin, system_error est une erreur runtime très intéressante puisqu'elle concerne les erreurs-système donc des problèmes techniques, souvent. Et on a notamment ios_base :: failure qui est utilisée pour tout ce qui est problème sur les flux d’entrée-sortie et elle a été passée en c++11 comme étant classe dérivée de system_error. Nous l'utiliserons d'ailleurs plus loin dans la formation. Les exceptions de langage de type bad_* dérivent toutes de stdexception. Je les ai donc regroupées sous cette catégorie. Il y en a cinq ici aussi. Bad_typeid est déclenchée quand on consulte les informations de type d'une instance alors que cette instance est nulle, bad_cast va être déclenchée quand on tente de faire un dynamique cast sur un mauvais type, bad_weakptr concerne le pointeur intelligent faible. Ce pointeur faible s'il a une ressource qui est perdue, à ce moment-là, on aura l'exception qui sera déclenchée si on essaie d'utiliser cette ressource. Le bad_alloc, lui, est déclenché quand il n'y a plus de mémoire au niveau de votre processus. C'est vraiment quand vous faites un New et que le système ne peut pas vous attribuer de mémoire, cette exception est levée. Vous pouvez tenter de faire un try catch, c'est-à-dire de la capter mais c'est quelque chose d'assez difficile puisqu'il faut arriver à faire un traitement sans avoir de mémoire à sa disposition. Il vous faudra donc vraiment faire le strict minimum de façon à tenter de perdre le moins de données possibles. Enfin, bad_exception est levée lorsqu'on relaye une exception de façon inadéquate. Nous verrons dans les bonnes pratiques du dernier chapitre comment relayer une exception. Enfin, les exceptions logiques qui sont intéressantes à retenir parce qu'on va les utiliser abondamment pour signaler que des paramètres inadéquats sont passés à nos méthodes. Alors, c'est une bonne habitude de vérifier les paramètres en entrée d'une méthode et de lever une de ces cinq exceptions en cas de valeur inattendue, notamment invalid_argument quand un argument n'est pas valide. C'est une exception générique, elle convient quand les autres plus précises ne conviennent pas pour l'argument en question. Out_of_range concerne un indice en dehors des limites. C'est un bug qui arrive malheureusement assez souvent puisqu'on manipule souvent des collections séquentielles de type tableau ou liste et que l'indice qui nous est fourni est en dehors de cette collection. Domain_error, lui, concerne une valeur que vous recevez et qui n'est pas dans le domaine que vous attendiez. Vous attendiez un caractère de type lettre et on vous donne un chiffre, voilà un exemple. Length_error, lui, c'est quand vous avez une longueur de variables qui ne convient pas. Vous attendiez par exemple une chaîne mais vous ne l'attendiez peut-être pas aussi grande et donc vous pouvez déclencher cette exception. Enfin, future_error qui est plus rare c'est quand on lance un traitement asynchrone. Si on consulte le résultat du traitement qu'on vient de lancer, alors que le traitement n'est pas encore obtenu, on peut déclencher cette erreur. Prenons un exemple, on lance une connexion à un serveur et on consulte la réponse du serveur alors qu'on n'a toujours pas reçu justement cette réponse. Donc là, on lève l'exception. Nous voyons qu'il existe beaucoup d'exceptions. S'il fallait en retenir que trois parmi les exceptions logiques déjà ce seraient celles-là : invalid_argument, out_of_range et domain_error. Donc l'argument non valide, l'indice hors des limites et la valeur hors domaine. Et puis, en ajoutant les erreurs d’exécution, on a aussi system_error que l'on va souvent traiter. Retenir ces quatre exceptions est un bon début et on va voir maintenant, comment déclencher ces exceptions dans nos programmes.

C++ : ​La gestion des erreurs avec les exceptions

Profitez des nombreux atouts des exceptions pour gérer les erreurs dans vos développements C++. Apprenez à les déclencher, les intercepter, les personnaliser, etc.

56 min (13 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :20 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !