Мне посоветовали использовать шаблон Singleton вместо глобальных объектов, которые имеют «статическую» продолжительность хранения, чтобы избежать фиаско статического порядка инициализации. Но теперь, когда у меня есть модули C++20, стоит ли мне это делать?
Фиаско порядка статической инициализации
Фиаско статического порядка инициализации относится к неоднозначности порядка инициализации объектов со статическим сроком хранения в разных единицах трансляции. Если объект в одной единице трансляции полагается на уже инициализируемый объект в другой единице трансляции, сбой может произойти, если компилятор решит инициализировать их в неправильном порядке. Например, порядок, в котором
Код: Выделить всё
.cppФайлы
В пределах одного перевода единицу фиаско не происходит, поскольку объекты инициализируются сверху вниз.
Продолжительность хранения< br />«статическая» продолжительность хранения.
Память для объекта выделяется при запуске программы и освобождается при ее завершении. Существует только один экземпляр объекта. Все объекты, объявленные в области пространства имен (включая глобальное пространство имен), имеют этот срок хранения, а также объекты, объявленные с помощью
Код: Выделить всё
static илиextern. Подробности об инициализации объектов с таким сроком хранения см. в разделах «Нелокальные переменные» и «Статические локальные переменные».
Насколько мне известно…< /h2>
«Фиаско порядка статической инициализации» означает, что объекты со «статической» продолжительностью хранения, такие как глобальные объекты, в немодульном режиме.cpp
Затем, с модулями C++20…
Зависимости между файлами модулей C++ («единицами перевода») кажутся очевидными с помощью
Код: Выделить всё
import
Код: Выделить всё
import
Источник: https://stackoverflow.com/questions/781 ... 20-modules