Junior — Middle
Como são tratadas as exceções dentro do construtor e quais são as características desse processo?
sobes.tech IA
Resposta da IA
Em C++, as exceções lançadas dentro do construtor são tratadas de uma forma especial. Se ocorrer uma exceção no construtor, o objeto é considerado não criado e o seu destruidor não é chamado.
Características:
- A exceção lançada no construtor é passada para o código que o chamou.
- Os membros do objeto que já foram criados e estão parcialmente inicializados serão destruídos corretamente (os seus destrutores serão chamados).
- O destruidor do próprio objeto não é chamado, pois o objeto não é considerado completamente criado.
Exemplo:
class MyClass {
public:
MyClass() {
// Se aqui for lançada uma exceção
throw std::runtime_error("Erro no construtor");
}
~MyClass() {
// Este destruidor não será chamado se uma exceção for lançada no construtor
}
};
int main() {
try {
MyClass obj;
} catch (const std::exception& e) {
std::cout << "Exceção capturada: " << e.what() << std::endl;
}
}
Portanto, é importante ter em mente que, ao lançar uma exceção no construtor, o objeto não é criado, e essas situações devem ser tratadas corretamente.