假设结构 A 和 B 是定义如下的单例结构:
struct A
{
B& b_;
static A& shared_a() { ... }
A() : b_(B::shared_b()) { ... }
};
struct B
{
A& a_;
static B& shared_b() { ... }
B() : a_(A::shared_a()) { ... }
};
假设文件结构被组织,以便代码可以编译。
第一次调用A::shared_a,会构造A的共享实例。A的共享实例的构造函数会调用B::shared_b,B::shared_b会构造B的共享实例。接下来,共享的构造函数B 的实例将调用 A::shared_a。但是,A 的共享实例还没有完成它的构造函数!因此,这些构造函数将无限循环。
为了防止这样的循环,我可以合并类 A 和 B,但我想避免这样做。有没有更优雅的解决方案?
谢谢,
山姆