Sobes.tech
Junior — Middle

Em que momento o uso do operador throw dentro de um destruidor se torna inaceitável?

sobes.tech IA

Resposta da IA

A utilização do operador throw (em C++ — throw) dentro do destruidor torna-se inaceitável se o destruidor for chamado durante o tratamento de outra exceção. Nesse caso, lançar uma nova exceção levará à chamada de std::terminate(), o que terminará o programa.

Em outras palavras, se o destruidor for chamado durante a propagação de uma exceção (por exemplo, ao sair de um bloco try), não se deve lançar exceções a partir do destruidor. Para evitar isso, geralmente captura-se todas as exceções no destruidor e não as deixa sair.

Exemplo de destruidor seguro:

~MyClass() {
    try {
        // código que pode lançar exceção
    } catch (...) {
        // tratamento ou registro, mas não lançar exceção
    }
}