在静态成员分配之前调用函数

Call a function before static member allocation

本文关键字:调用 函数 静态成员 分配      更新时间:2023-10-16

我使用的是第三方API,它覆盖了C运行库中的内存管理函数。为了使一切正常工作,我必须在进行任何内存分配之前调用以初始化API。

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

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

C++标准库也遇到了同样的问题:它必须确保cincout等在任何代码(包括静态对象的构造函数)使用它们之前都已初始化。为处理这种情况而发明的技巧也可以解决你的问题。在一个头文件中,首先包含在每个翻译单元中(好吧,每个翻译单元都有带动态初始化器的静态对象):

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

在一个翻译单元中,您必须提供CCD_ 3的定义。

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

这被称为"漂亮的计数器把戏"。

您应该将静态工厂对象初始化转移到一个静态函数,并在初始化第三方lib后调用该函数。