C ++静态初始化顺序
当我在C ++中使用静态变量时,我常常想要初始化一个变量,将另一个变量传递给它的构造函数。换句话说,我想创建彼此依赖的静态实例。
在单个.cpp或.h文件中,这不是问题:将按照声明的顺序创建实例。但是,如果要使用另一个编译单元中的实例初始化静态实例,则无法指定顺序。结果是,根据天气,可能会发生构建依赖于另一个实例的实例,并且之后才构建另一个实例。结果是第一个实例初始化不正确。
有谁知道如何确保以正确的顺序创建静态对象?我已经搜索了很长时间寻找解决方案,尝试了所有这些解决方案(包括Schwarz Counter解决方案),但我开始怀疑有一个确实有效。
一种可能性是使用静态函数成员的技巧:
Type& globalObject(){ static Type theOneAndOnlyInstance; return theOneAndOnlyInstance;}
实际上,这确实有效。遗憾的是,您必须编写globalObject()。MemberFunction()而不是globalObject.MemberFunction(),从而导致一些令人困惑和不雅的客户端代码。
更新:感谢您的反应。遗憾的是,我确实似乎回答了自己的问题。我想我必须学会忍受它......
12345678_0001
蓝山帝景
相关分类