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