Как-то я об этом не задумывался. Жили-были себе спокойно несколько синглетонов. Объявлены они были статически как глобальные переменные внутри cpp файлов. Причём одни (обёртки) обращаются к другим прямо во время создания.
MyClass singletonInstance;
Сделано было так специально, чтобы не заводить динамически создаваемые объекты - для них при завершении работы программы не вызываются деструкторы, да и память не чистится.
И вот в один прекрасный день - сегодня - вдруг всё сломалось. При инициализации вдруг обёртки стали находить другие объекты ещё не созданными.
По стандарту вроде бы порядок инициализации неопределённый. Т.е. до сих пор мне просто везло.
Ну первое, что приходит в голову - ленивая инициализация по первому запросу + умный указатель.
Какие ещё могут быть решения?
P.S. Важно, что всё это в один модуль не собрать.