Когда я использую статические переменные в С++, я часто теряю желание инициализировать одну переменную, передавая ее другому конструктору. Другими словами, я хочу создать статические экземпляры, которые зависят друг от друга.
Внутри одного файла .cpp или .h это не проблема: экземпляры будут созданы в том порядке, в котором они объявлены. Однако, если вы хотите инициализировать статический экземпляр экземпляром в другом модуле компиляции, порядок представляется невозможным. В результате, в зависимости от погоды, может случиться так, что экземпляр, который зависит от другого, строится, и только после этого создается другой экземпляр. В результате первый экземпляр инициализируется неправильно.
Кто-нибудь знает, как обеспечить, чтобы статические объекты были созданы в правильном порядке? Я долго искал решение, пытаясь всех (включая решение Schwarz Counter), но я начинаю сомневаться, что есть тот, который действительно работает.
Одна из возможностей - это трюк со статическим членом функции:
Type& globalObject()
{
static Type theOneAndOnlyInstance;
return theOneAndOnlyInstance;
}
Действительно, это действительно работает. К сожалению, вам нужно написать globalObject(). MemberFunction() вместо globalObject.MemberFunction(), что приводит к несколько запутанному и неэлегантному клиентскому коду.
Обновление: Благодарим за ваши реакции. К сожалению, мне кажется, что я ответил на свой вопрос. Думаю, мне придется научиться жить с ним...