Как обрабатывать неудачные вызовы FMOD API в конструкторе / деструкторе? - PullRequest
0 голосов
/ 04 апреля 2019

Я делаю класс mp3-плеера на C ++, используя FMOD Core API. Я обертываю необработанный указатель FMOD::System внутри класса System, который я хочу использовать для реализации RAII. Я создаю и инициализирую дескриптор в конструкторе и освобождаю его в деструкторе. К сожалению, все три функции FMOD::System_Create, System::init() и System::release() могут выйти из строя.

У меня есть несколько вопросов:

  1. В конструкторе, если System::init не удастся, мне придется очистить ресурсы, используя System::release(), что также может привести к сбою. Что мне тогда делать? Создайте исключение в конструкторе, который печатает сообщение об ошибке и вызывает exit(EXIT_FAILURE)?

  2. Что если в деструкторе произойдет сбой System::release()? Я делаю то же самое? Это хорошая практика?

Должен ли я даже использовать RAII в этом сценарии? Если нет, что мне делать?

Я знаю, что в StackOverflow есть много сообщений об ошибках конструкторов / деструкторов. Но ни один из них, кажется, не приходит к выводу и не относится к моему конкретному сценарию.

...