Sobes.tech
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.