我使用的是第三方API,它覆盖了C运行时库中的内存管理功能。为了使一切正常工作,我必须先进行调用以初始化API,然后再进行任何内存分配。

我正在处理的项目使用静态Factory对象,该对象在执行主文件中的任何代码之前会动态初始化。

如何确保在静态Factory对象之前初始化API?

最佳答案

C ++标准库遇到相同的问题:必须确保在任何代码(包括静态对象的构造函数)使用它们之前,先初始化cincout等。为解决这种情况而发明的技巧也可以解决您的问题。在头文件中,该文件首先包含在每个翻译单元中(当然,每个包含静态对象和动态初始化程序的翻译单元):

class init_library {
public:
    init_library() { if (counter++ == 0) initilaize_the_library(); }
private:
    static int counter;
};

static init_library i_library;


在一个翻译单元中,您必须提供init_library::counter的定义。

这会将静态类型为init_library的静态对象放入提取标头的每个转换单元中。它的初始化将在同一翻译单元中的任何其他初始化之前进行(因为它的#include指令首先出现-别忘了!),并且第一次初始化这些对象之一时,它将调用代码进行初始化图书馆。 (请注意,此代码不是线程安全的;使其变得线程安全很简单)

这就是所谓的“漂亮的柜台把戏”。

关于c++ - 在静态成员分配之前调用一个函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12408787/

10-11 22:23
查看更多