Sobes.tech
Middle+
226

Wird der Destruktor aufgerufen, wenn im Konstruktor eine Ausnahme ausgelöst wird?

Antwort von AI

sobes.tech KI

Нет, деструктор не будет вызван.

Если во время выполнения конструктора класса возникает исключение, объект считается не полностью сконструированным. В таком случае C++ не вызывает деструктор для этого частично созданного объекта. Вызываются деструкторы только для полностью сконструированных подобъектов (базовых классов или членов класса).

Пример:

#include <iostream>
#include <stdexcept>

class MyClass {
public:
    MyClass() {
        std::cout << "Конструктор MyClass" << std::endl;
        throw std::runtime_error("Ошибка в конструкторе");
    }

    ~MyClass() {
        std::cout << "Деструктор MyClass" << std::endl; // Этот код не будет выполнен
    }
};

int main() {
    try {
        MyClass obj; // Здесь будет брошено исключение
    } catch (const std::runtime_error& e) {
        std::cerr << "Поймано исключение: " << e.what() << std::endl;
    }
    return 0;
}

Вывод программы:

Конструктор MyClass
Поймано исключение: Ошибка в конструкторе

Деструктор ~MyClass() не вызывается.