Sobes.tech
Junior — Middle

Pode usar o operador throw dentro de um destruidor para lançar uma exceção?

sobes.tech IA

Resposta da IA

Lançar exceções a partir de um destruidor em C++ é altamente indesejável e pode levar a problemas graves. Se o destruidor for chamado durante o tratamento de outra exceção, e uma nova exceção for lançada dentro do destruidor, ocorre uma chamada a std::terminate(), o que leva ao encerramento abrupto do programa.

Portanto:

  • Não é recomendado usar o operador throw dentro de um destruidor.
  • Se precisar tratar um erro no destruidor, é melhor usar construções try-catch dentro do próprio destruidor e não lançar exceções para fora.

Exemplo de destruidor seguro:

~MyClass() {
    try {
        // código que pode lançar exceção
    } catch (...) {
        // tratamento da exceção, mas não a lançamos para fora
    }
}