Sobes.tech
Back to questions
Junior — Middle
79

Какие последствия возникают, если в конструкторе объекта происходит необработанное исключение?

Companies where asked
Открытые РешенияОткрытые Решения

Answer from AI

sobes.tech AI

Если в конструкторе объекта в C++ происходит необработанное исключение, то:

  • Конструктор считается неуспешно завершённым, объект не создаётся.
  • Для всех уже созданных членов объекта (например, полей, которые были инициализированы до места возникновения исключения) вызываются деструкторы.
  • Память, выделенная под объект, освобождается автоматически.
  • Исключение передаётся дальше по стеку вызовов, если не перехвачено внутри конструктора.

Это предотвращает создание частично инициализированных объектов и обеспечивает безопасность ресурсов.

Пример:

class MyClass {
public:
    MyClass() {
        // Инициализация
        throw std::runtime_error("Ошибка в конструкторе");
    }
};

int main() {
    try {
        MyClass obj;
    } catch (const std::exception& e) {
        std::cout << "Поймано исключение: " << e.what() << std::endl;
    }
}