Sobes.tech
Junior — Middle

À quel moment l'utilisation de l'opérateur throw dans un destructeur devient-elle inacceptable?

sobes.tech IA

Réponse de l'IA

L'utilisation de l'opérateur throw (en C++ — throw) à l'intérieur du destructeur devient inacceptable si le destructeur est appelé lors du traitement d'une autre exception. Dans ce cas, lancer une nouvelle exception entraînera l'appel à std::terminate(), ce qui terminera le programme.

En d'autres termes, si le destructeur est appelé lors de la propagation d'une exception (par exemple, lors de la sortie d'un bloc try), il ne faut pas lancer d'exceptions depuis le destructeur. Pour éviter cela, on attrape généralement toutes les exceptions dans le destructeur et on ne les laisse pas sortir.

Exemple de destructeur sûr :

~MyClass() {
    try {
        // code pouvant lancer une exception
    } catch (...) {
        // gestion ou journalisation, mais pas lancer d'exception
    }
}