Я делаю класс mp3-плеера на C ++, используя FMOD Core API. Я обертываю необработанный указатель FMOD::System
внутри класса System
, который я хочу использовать для реализации RAII. Я создаю и инициализирую дескриптор в конструкторе и освобождаю его в деструкторе. К сожалению, все три функции FMOD::System_Create
, System::init()
и System::release()
могут выйти из строя.
У меня есть несколько вопросов:
В конструкторе, если System::init
не удастся, мне придется очистить ресурсы, используя System::release()
, что также может привести к сбою. Что мне тогда делать? Создайте исключение в конструкторе, который печатает сообщение об ошибке и вызывает exit(EXIT_FAILURE)
?
Что если в деструкторе произойдет сбой System::release()
? Я делаю то же самое? Это хорошая практика?
Должен ли я даже использовать RAII в этом сценарии? Если нет, что мне делать?
Я знаю, что в StackOverflow есть много сообщений об ошибках конструкторов / деструкторов. Но ни один из них, кажется, не приходит к выводу и не относится к моему конкретному сценарию.