c – 对象初始化

在“C语言”一书中,作者声称

Sometimes, when you design a library, it is necessary, or simply convenient, to invent a type with a constructor and a destructor with the sole purpose of initialization and cleanup. Such a type would be used once only: to allocate a static object so that the constructor and the destructor are called.

我感兴趣的是这句话所指的是什么样的场景?或者这句话如何帮助软件设计?

这本书也举了一个例子

class Zlib_init{
    Zlib_init( );
    ~Zlib_init( );
};

class Zlib{
    static Zlib_init x;
}

这本书说明了这一点

Unfortunately, it is not guaranteed that such an object is initialized before its first use and destroyed after its last use in a program consisting of separately compiled units.

为什么会这样?

谢谢你的澄清.

最佳答案 C标准未指定静态对象的创建顺序.因此,如果您需要静态对象中的某个层次结构,则需要它们相互依赖(例如,一个应该是另一个的成员).书中的构造保证了这种行为.

例如,一个假想的游戏引擎需要声音和图形引擎才能工作,如果你在不同的编译单元中将它们声明为静态对象,并且彼此使用它们,除非你按照你指定的方式对它们进行编码,否则不能保证它不会失败.

有关问题的第二部分,请参阅C++ faq条目.

点赞