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
throwdentro de um destruidor. - Se precisar tratar um erro no destruidor, é melhor usar construções
try-catchdentro 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
}
}