假设我有一个 C 库,它有自己的(反)初始化例程,很多库都有。
init_API();
deinit_API();
现在假设我想为用户提供另一个抽象级别,并使用静态实例化的类抽象掉这些调用。我想到的方法:
struct API_initializer{
API_initializer(){
init_API();
if(API_init_failure)
throw (APIFailureException); //important
}
~API_initializer(){
deinit_API();
}
};
struct API_initializer_holder{
static API_initializer initializer;
};
现在,我的问题是,这是明确定义的行为吗?即,是否会在某个合理的时间点调用静态构造函数,是否会正确初始化 C API 需要的所有(静态)变量?此外,抛出用户无法捕获的异常是否是一种不好的做法?
最佳答案
根据我的经验,尝试依赖静态初始化顺序是个坏主意。
一个更好的主意是摆脱持有人,然后去:
int main()
{
API_initializer foo;
// rest of program
}
如果您真的希望它在失败时抛出,则包含一个 try..catch block 。
注意。使类不可复制以防止发生事故。
关于c++ - 这是 "Idiom"定义良好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112555/