如何处理构造函数/析构函数中失败的FMOD API调用?

时间:2019-04-04 15:46:28

标签: c++ memory-management destructor raii fmod

我正在使用FMOD Core API在C ++中制作mp3播放器类。我将原始FMOD::System指针包装在我想用来实现RAII的System类中。我在构造函数中创建并初始化该句柄,然后在析构函数中将其释放。不幸的是,所有三个功能FMOD::System_CreateSystem::init()System::release()都可能失败。

我有一些问题:

  1. 在构造函数中,如果System::init失败,我将不得不使用System::release()清理资源,这也会失败。那我该怎么办?在构造函数内引发异常,该异常会显示错误消息并调用exit(EXIT_FAILURE)

  2. 如果System::release()在析构函数中失败怎么办?我也一样吗?这是好习惯吗?

在这种情况下,我还要使用RAII吗?如果没有,我该怎么办?

我知道StackOverflow上有很多关于构造函数/析构函数失败的帖子。但是似乎没有人得出结论或适用于我的特定情况。

0 个答案:

没有答案