Предположим, что структуры 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, но я хотел бы избежать этого. Есть ли более элегантное решение?
Спасибо,
Сэм