Sûreté vis-à-vis des exceptions
Écrire du code sûr face aux exceptions
Sûreté vis-à-vis des exceptions est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Ce que signifie la sûreté des exceptions
La sûreté des exceptions décrit les garanties que votre code conserve lorsqu’une exception est levée au cours d’une opération.
La garantie sans levée d’exception
Le niveau le plus élevé : l’opération ne lève jamais d’exception. Les destructeurs, les échanges et les opérations de déplacement devraient viser ce niveau et être marqués noexcept.
La garantie forte
Si l’opération lève une exception, l’état du programme est annulé comme si elle n’avait jamais commencé — une sémantique de validation ou d’annulation.
La garantie de base
Si l’opération lève une exception, aucune ressource ne fuit et tous les invariants restent valides, même si l’état exact peut avoir changé.
L’absence de garantie
Le niveau le plus faible : une exception peut laisser le programme dans un état corrompu ou provoquer une fuite de ressources. Évitez d’écrire ce type de code.
RAII fournit la garantie de base
En enveloppant les ressources dans des objets RAII, le déroulement de la pile les libère automatiquement, ce qui vous fournit presque gratuitement la garantie de base.
#include <memory>
#include <stdexcept>
void process() {
auto buf = std::make_unique<int[]>(100); // freed even if throw
throw std::runtime_error("oops"); // no leak
}Copie-échange pour une sûreté forte
Une technique courante consiste à effectuer tout le travail risqué sur une copie, puis à l’insérer avec swap. L’échange ne lève pas d’exception, la modification est donc tout ou rien.
void assign(Widget& target, const Widget& src) {
Widget tmp = src; // may throw, target untouched
using std::swap;
swap(target, tmp); // no-throw commit
}Ordonner les opérations pour valider en dernier
Effectuez chaque opération susceptible de lever une exception avant toute modification irréversible. Une fois que vous commencez à modifier un état partagé, vous ne devriez plus pouvoir échouer.
Attention aux mises à jour partielles
Mettre à jour deux membres alors que le second peut lever une exception laisse l’objet incohérent. Préparez les deux modifications, puis validez-les ensemble avec des étapes qui ne lèvent pas d’exception.
Les destructeurs ne doivent pas lever d’exception
Un destructeur qui lève une exception pendant le déroulement de la pile appelle std::terminate. Gardez les destructeurs exempts de levée d’exception pour préserver les garanties de sûreté.
Choisir une garantie
Visez la garantie forte lorsque c’est possible, fournissez toujours au moins la garantie de base et marquez les opérations réellement exemptes de levée d’exception avec noexcept.
Vérification rapide
Vérifiez votre compréhension de la sûreté des exceptions.
Récapitulatif
Vous avez appris les quatre niveaux de sûreté des exceptions : sans levée d’exception, forte, de base et aucune. RAII fournit automatiquement la garantie de base ; la copie-échange et la validation en dernier fournissent la garantie forte. Gardez les destructeurs et les échanges exempts de levée d’exception.
Questions Fréquemment Posées
La leçon « Sûreté vis-à-vis des exceptions » est-elle gratuite ?
Oui — le texte complet de « Sûreté vis-à-vis des exceptions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Sûreté vis-à-vis des exceptions » ?
Écrire du code sûr face aux exceptions Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Sûreté vis-à-vis des exceptions » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- try, catch, throw
- Sûreté vis-à-vis des exceptions
- Spécificateur noexcept
- Types d’exceptions personnalisés