мне сказали использовать синглтонский паттерн вместо того, чтобы иметь глобальные объекты, которые имеют «статическую» продолжительность хранения, чтобы избежать фиаско заказа по статической инициализации. Но теперь, когда у меня есть модули 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
Происходит ли фиаско по порядку статической инициализации с модулями C ++ 20? ⇐ C++
Программы на C++. Форум разработчиков
1755470272
Anonymous
мне сказали использовать синглтонский паттерн вместо того, чтобы иметь глобальные объекты, которые имеют «статическую» продолжительность хранения, чтобы избежать фиаско заказа по статической инициализации. Но теперь, когда у меня есть модули C ++ 20, должен ли я? Еще один блок перевода уже инициализируется, может произойти сбой, если компилятор решит инициализировать их в неправильном порядке. Например, порядок, в котором файлы .cpp указаны в командной строке, может изменить этот заказ. Конструкция на первом использовании < /em> идиома может использоваться, чтобы избежать фиаско -порядка статической инициализации и убедиться, что все объекты инициализированы в правильном порядке. < /P>
В пределах единицы блока перевода фиаско не применяется, потому что объекты инициализируются сверху вниз. Продолжительность < /h2>
«Статическая» продолжительность хранения. < /h3>
Хранение для объекта выделяется, когда программа начинается и складывается, когда программа заканчивается. Существует только один экземпляр объекта. Все объекты, объявленные в области пространства имен (включая глобальное пространство имен), имеют эту продолжительность хранилища, плюс объявленные со статичными или extern . См. «Нелокальные переменные» и «статические локальные переменные» для получения подробной информации об инициализации объектов с этой продолжительностью хранения.
Насколько я знаю…
static orear static inemaric .cpp Файлы инициализируются ранее, неоднозначно. Это может привести к аварии, когда используется ненициализированный глобальный объект. Многие приняли шаблон Singleton, который включает в себя «Конструкцию по первому использованию (Lazy Construction) », чтобы избежать этого.
, с модулями C ++ 20…
Зависимости между файлами модулей C ++ («единицы перевода»), кажется, ясны в стативациях импорта в них. Имеет ли значение фиаско заказа по статической инициализации для них, и придется ли мне все еще использовать шаблон Singleton, вместо того, чтобы импортировать -белевые объекты, объявленные на верхнем уровне в модулях C ++?
Подробнее здесь: [url]https://stackoverflow.com/questions/78131450/does-the-static-initialization-order-fiasco-happen-with-c20-modules[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия