Происходит ли фиаско по порядку статической инициализации с модулями C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Происходит ли фиаско по порядку статической инициализации с модулями C ++ 20?

Сообщение Anonymous »

мне сказали использовать синглтонский паттерн вместо того, чтобы иметь глобальные объекты, которые имеют «статическую» продолжительность хранения, чтобы избежать фиаско заказа по статической инициализации. Но теперь, когда у меня есть модули C ++ 20, должен ли я? Еще один блок перевода уже инициализируется, может произойти сбой, если компилятор решит инициализировать их в неправильном порядке. Например, порядок, в котором файлы .cpp указаны в командной строке, может изменить этот заказ. Конструкция на первом использовании < /em> идиома может использоваться, чтобы избежать фиаско -порядка статической инициализации и убедиться, что все объекты инициализированы в правильном порядке. < /P>
В пределах единицы блока перевода фиаско не применяется, потому что объекты инициализируются сверху вниз. Продолжительность < /h2>
«Статическая» продолжительность хранения. < /h3>
Хранение для объекта выделяется, когда программа начинается и складывается, когда программа заканчивается. Существует только один экземпляр объекта. Все объекты, объявленные в области пространства имен (включая глобальное пространство имен), имеют эту продолжительность хранилища, плюс объявленные со статичными или extern . См. «Нелокальные переменные» и «статические локальные переменные» для получения подробной информации об инициализации объектов с этой продолжительностью хранения.

Насколько я знаю…
static orear static inemaric .cpp Файлы инициализируются ранее, неоднозначно. Это может привести к аварии, когда используется ненициализированный глобальный объект. Многие приняли шаблон Singleton, который включает в себя «Конструкцию по первому использованию (Lazy Construction) », чтобы избежать этого.
, с модулями C ++ 20…
Зависимости между файлами модулей C ++ («единицы перевода»), кажется, ясны в стативациях импорта в них. Имеет ли значение фиаско заказа по статической инициализации для них, и придется ли мне все еще использовать шаблон Singleton, вместо того, чтобы импортировать -белевые объекты, объявленные на верхнем уровне в модулях C ++?

Подробнее здесь: https://stackoverflow.com/questions/781 ... 20-modules
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»