c++ - 这是 "Idiom"定义良好吗?

标签 c++

假设我有一个 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/

相关文章:

c++ - 是否有一个选项不自动将所有前导下划线 _ 导出到 emscripten 中的函数?

C++ 将二进制(P5)图像转换为 ascii(P2)图像(.pgm)

C++包含头文件问题

c++ - CppUTest 单元测试框架多重定义异常

c++ - 为什么shared_ptr不能解析函数接口(interface)中的继承关系?

C++ 无向图

c++ - Qt启动cmd.exe

c++ - 在析构函数中删除指向 char* vector 的指针(不工作)

c++ - 构建wxWidgets Hello world

c++ - 类和类中的指针