Время создания экземпляра встроенного статического члена C++17: ленивое создание экземпляра или перед main()?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Время создания экземпляра встроенного статического члена C++17: ленивое создание экземпляра или перед main()?

Сообщение Anonymous »

Я определяю встроенный статический элемент данных в классе C++17 (

Код: Выделить всё

inline static SharedData gSharedData;
).
У меня два вопроса:
1)Похоже, это gSharedData создается до запуска main(), например (

Код: Выделить всё

non-inline static
member) и не ленивая инициализация (сначала используйте идиому). Всегда ли это так для встроенных статических переменных?
2) В проекте, над которым я работаю (большая база кода), который похож на приведенный ниже код, я наблюдаю несколько конструкторов вызовы из разных потоков, каждый из которых печатает свой адрес, что позволяет предположить, что создается более одного экземпляра! Насколько мне известно, создание статических переменных является потокобезопасным, начиная с C++11. Есть мысли или идеи, почему два потока создают один и тот же встроенный статический элемент?

Код: Выделить всё

#include 
#include 
class SharedData {
public:
SharedData() {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79347137/c17-inline-static-member-instantiation-timing-lazy-instantiation-or-before-ma[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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