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
}
}