Middle+
26
0
questionbank

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

Answer from sobes.tech neural network

Выброс исключения в конструкторе:

  • Если исключение выбрасывается в конструкторе, деструктор объекта не вызывается.
  • Необходимо позаботиться об освобождении уже выделенных ресурсов до момента выброса или использовать идиому RAII (Resource Acquisition Is Initialization) для управления ресурсами.
  • Частично сконструированный объект находится в неопределенном состоянии.

Выброс исключения в деструкторе:

  • Выброс исключения из деструктора в процессе раскрутки стека (stack unwinding) из-за другого исключения приводит к вызову std::terminate, которое прерывает выполнение программы. Это очень плохо.
  • Деструкторы должны быть noexcept.
  • Если в деструкторе необходимо выполнить операцию, которая может выбросить исключение (например, закрытие файла), следует обработать это исключение внутри деструктора (например, записать в лог) вместо его дальнейшего распространения.
cpp

Выброс исключения в конструкторе:

  • Если исключение выбрасывается в конструкторе, деструктор объекта не вызывается.
  • Необходимо позаботиться об освобождении уже выделенных ресурсов до момента выброса или использовать идиому RAII (Resource Acquisition Is Initialization) для управления ресурсами.
  • Частично сконструированный объект находится в неопределенном состоянии.

Выброс исключения в деструкторе:

  • Выброс исключения из деструктора в процессе раскрутки стека (stack unwinding) из-за другого исключения приводит к вызову std::terminate, которое прерывает выполнение программы. Это очень плохо.
  • Деструкторы должны быть noexcept.
  • Если в деструкторе необходимо выполнить операцию, которая может выбросить исключение (например, закрытие файла), следует обработать это исключение внутри деструктора (например, записать в лог) вместо его дальнейшего распространения.
cpp

Register or sign in to get access to full answers for all questions from the question bank.

exceptionsconstructorsdestructorsexception-handlingerror-handlingresource-management