Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Частично сконструированный объект: При выбросе исключения из конструктора объект считается не до конца созданным. Деструктор не будет вызван автоматически.
Ресурсы: Ресурсы, выделенные до точки выброса исключения внутри конструктора, должны быть освобождены. Это может быть сложно, так как у частично созданного объекта нет деструктора. Применяются техники RAII (Resource Acquisition Is Initialization).
RAII: Наилучший способ справиться с этой ситуацией — использовать RAII. Ресурсы (память, файловые дескрипторы и т.д.) должны быть обернуты в классы с деструкторами, которые гарантированно освободят ресурс при выходе из области видимости (включая выход по исключению). Примеры: std::unique_ptr
, std::shared_ptr
, std::vector
, std::fstream
.
Исключения из списков инициализации членов: Если исключение выбрасывается при инициализации члена класса в списке инициализации, конструктор всего объекта прерывается, и ресурсы, выделенные до этого, не освобождаются автоматически, если они не обернуты в RAII-объекты.
Исключения из тела конструктора: Если исключение выбрасывается из тела конструктора, деструкторы уже проинициализированных RAII-членов класса вызываются автоматически, обеспечивая очистку.
6
Частично сконструированный объект: При выбросе исключения из конструктора объект считается не до конца созданным. Деструктор не будет вызван автоматически.
Ресурсы: Ресурсы, выделенные до точки выброса исключения внутри конструктора, должны быть освобождены. Это может быть сложно, так как у частично созданного объекта нет деструктора. Применяются техники RAII (Resource Acquisition Is Initialization).
RAII: Наилучший способ справиться с этой ситуацией — использовать RAII. Ресурсы (память, файловые дескрипторы и т.д.) должны быть обернуты в классы с деструкторами, которые гарантированно освободят ресурс при выходе из области видимости (включая выход по исключению). Примеры: std::unique_ptr
, std::shared_ptr
, std::vector
, std::fstream
.
Исключения из списков инициализации членов: Если исключение выбрасывается при инициализации члена класса в списке инициализации, конструктор всего объекта прерывается, и ресурсы, выделенные до этого, не освобождаются автоматически, если они не обернуты в RAII-объекты.
Исключения из тела конструктора: Если исключение выбрасывается из тела конструктора, деструкторы уже проинициализированных RAII-членов класса вызываются автоматически, обеспечивая очистку.
6
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.