構造体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の共有インスタンスを構築します。次に、共有のコンストラクターBのインスタンスはA::shared_aを呼び出します。ただし、Aの共有インスタンスはコンストラクターを完了していません。したがって、これらのコンストラクターは無限にループします。
このようなループを防ぐために、クラスAとクラスBをマージすることもできますが、そうすることは避けたいと思います。よりエレガントな解決策はありますか?
ありがとう、
サム