Junior — Middle
O que acontece com a chamada do destruidor de um objeto se ocorrer uma exceção no seu construtor?
sobes.tech IA
Resposta da IA
Se ocorrer uma exceção no construtor de um objeto em C++, o destruidor desse objeto não é chamado, porque o objeto é considerado não totalmente criado.
No entanto, os destruidores dos membros do objeto e das classes base que já foram completamente criados e construídos com sucesso antes da ocorrência da exceção serão chamados para liberar recursos corretamente.
Exemplo:
class A {
public:
A() { throw std::runtime_error("Erro no construtor"); }
~A() { std::cout << "Destruidor A" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "Destruidor B" << std::endl; }
};
int main() {
try {
B b; // ao criar a em B() será lançada uma exceção
} catch (...) {
std::cout << "Exceção capturada" << std::endl;
}
}
Neste exemplo, o destruidor de B não será chamado, pois o objeto B não foi totalmente criado, mas o destruidor de A será chamado se A foi construído com sucesso antes da exceção.