Middle+
26
0
questionbank

Расскажи о вызовах операторов throw для исключений в конструкторах и деструкторах.

Answer from sobes.tech neural network

В конструкторе выброс исключения приводит к тому, что объект не будет полностью сконструирован. Порядок выполнения деструкторов для полностью или частично сконструированных подобъектов определяется стандартом: деструкторы будут вызваны для всех членов и базовых классов, которые были успешно инициализированы до момента генерации исключения.

Проблема выброса исключений из деструктора заключается в следующем: если деструктор вызывается в процессе раскрутки стека из-за другого исключения, и сам выбрасывает исключение, происходит вызов std::terminate(). Это приводит к аварийному завершению программы, так как стандарт не позволяет выбрасывать новое исключение во время обработки существующего. Следовательно, выбрасывать исключения из деструкторов в общем случае крайне не рекомендуется.

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

cpp

В конструкторе выброс исключения приводит к тому, что объект не будет полностью сконструирован. Порядок выполнения деструкторов для полностью или частично сконструированных подобъектов определяется стандартом: деструкторы будут вызваны для всех членов и базовых классов, которые были успешно инициализированы до момента генерации исключения.

Проблема выброса исключений из деструктора заключается в следующем: если деструктор вызывается в процессе раскрутки стека из-за другого исключения, и сам выбрасывает исключение, происходит вызов std::terminate(). Это приводит к аварийному завершению программы, так как стандарт не позволяет выбрасывать новое исключение во время обработки существующего. Следовательно, выбрасывать исключения из деструкторов в общем случае крайне не рекомендуется.

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

cpp

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

exception-handlingconstructorsdestructorserror-managementresource-managementclean-up