当我在C ++中使用静态变量时,我常常最终想要初始化一个变量,并将另一个传递给其构造函数。换句话说,我想创建相互依赖的静态实例。
在单个.cpp或.h文件中,这不是问题:实例将按照声明的顺序创建。但是,当您要使用另一个编译单元中的实例初始化静态实例时,似乎无法指定顺序。结果是,取决于天气,可能会构造依赖另一个实例的实例,然后才构造另一个实例。结果是第一个实例未正确初始化。
有谁知道如何确保以正确的顺序创建静态对象?我已经寻找了很长时间的解决方案,尝试了所有解决方案(包括Schwarz Counter解决方案),但是我开始怀疑是否有真正可行的解决方案。
一种可能是使用静态函数成员的技巧:
Type& globalObject()
{
static Type theOneAndOnlyInstance;
return theOneAndOnlyInstance;
}
确实,这确实有效。遗憾的是,您必须编写globalObject()。MemberFunction()而不是globalObject.MemberFunction(),从而导致客户端代码有些混乱和不雅观。
更新:感谢您的反应。遗憾的是,确实好像我已经回答了我自己的问题。我想我必须学会忍受...