这次和同学一起做 C++ 课的 project ,我们分成几个层次在做,我做的比较底层的东西。后来我发现在底层库可用之前我需要做一些全局的初始化。以前做 C 的 project 的时候是使用了一个 init() 函数,要求在使用之前必须调用。不过现在在 C++ 里面有构造函数可以用。于是我可以完全向上一层隐藏这个细节了。
要做的就是定义一个具有私有构造函数的类,然后定义一个 const 的私有静态实例,最后把这个类链接到程序里面,就可以保证在 main() 函数之前这个类的构造函数被调用了。
// Init.hpp
class Init
{
private:
Init();
static const Init startup_init;
};
// Init.cpp
static const Init Init::startup_init;

Init::Init()
{
// init code here
}
由于这只关系到本层次的初始化,与其他初始化代码(如果有的话)无关,所以不用担心静态对象初始化顺序的问题。而 Init 类既不能在外面实例化,也不能获取那个唯一的实例的引用,就算是专心干它自己唯一的工作了。
要做的就是定义一个具有私有构造函数的类,然后定义一个 const 的私有静态实例,最后把这个类链接到程序里面,就可以保证在 main() 函数之前这个类的构造函数被调用了。















由于这只关系到本层次的初始化,与其他初始化代码(如果有的话)无关,所以不用担心静态对象初始化顺序的问题。而 Init 类既不能在外面实例化,也不能获取那个唯一的实例的引用,就算是专心干它自己唯一的工作了。