如何控制翻译单元之间对象的静态依存关系?

时间:2018-07-23 16:30:33

标签: c++

在C ++中,如果以不同翻译单元定义了相互依赖的静态对象,则该语言本身无法保证初始化的顺序。

Bruce Eckel给出了一个示例(“在C ++中思考”):

第一个文件定义了一个名为ofstream的{​​{1}}对象:

out


第二个文件对//: C10:Out.cpp {O} // (c) Bruce Eckel 2000 // First file #include <fstream> std::ofstream out("out.txt"); ///:~ 对象有依赖性:

ofstream

在构建并链接这2个文件以创建可执行文件时,仅当第一个文件在第二个文件之前被初始化时,exe才起作用。否则程序将崩溃。

Eckel提供了两种解决方案。

第一个解决方案涉及一种技术(由Jerry Schwarz开创),并在库头文件中使用Initializer类。 Initializer类负责库的静态对象的动态初始化。

Eckel提供了一个示例,该示例动态初始化2个内置类型的静态全局变量。

基本技术对我来说很清楚。

然后他进入状态:

  

此示例使用内置类型作为全局静态对象。该技术还适用于类,但是必须由Initializer类动态初始化这些对象。一种方法是创建没有构造函数和析构函数的类,而是使用不同名称的初始化和清除成员函数来创建类。但是,更常见的方法是具有指​​向对象的指针,并使用new Initializer()来创建它们。

关于Eckel的陈述,我有以下查询:

1)为什么需要创建没有构造函数和析构函数的类,而是使用不同名称的初始化和清除成员函数来创建类?
2)如何使用使用指向对象的指针的方法?
3)示例将有很大帮助。

0 个答案:

没有答案