Sobes.tech
Назад к вопросам
Junior — Middle
82

Каким образом работают исключения в процессе выполнения конструктора и что о них необходимо знать?

Ответ от нейросети

sobes.tech AI

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

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

Важно помнить:

  • Исключения в конструкторе должны быть обработаны или проброшены выше, чтобы не привести к неопределённому состоянию.
  • Если конструктор выбрасывает исключение, деструкторы для самого объекта не вызываются, так как объект не считается созданным.
  • Исключения в списке инициализации членов конструктора также приводят к отмене создания объекта.

Пример:

class Example {
public:
    Example() {
        // Если здесь выбрасывается исключение, объект не создаётся
        throw std::runtime_error("Ошибка в конструкторе");
    }
};

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

В этом примере объект ex не будет создан, а исключение будет обработано в блоке catch.