Я знаю, что это часто задаваемый вопрос, но, поскольку существует так много вариантов, я хотел бы переформулировать его и, надеюсь, иметь ответ, отражающий текущее состояние. Что-то вроде
Logger& g_logger() {
static Logger lg;
return lg;
}
Является ли конструктор переменной lg гарантированно работать только один раз?
Я знаю из предыдущих ответов, что в С++ 03 это не так; в проекте С++ 0x это принудительно. Но я бы хотел получить более четкий ответ
- В стандарте С++ 11 (не черновик) завершено ли поведение инициализации потокобезопасным?
- Если приведенное выше да, в последних последних выпусках популярных компиляторов, а именно gcc 4.7, vc 2011 и clang 3.0, они правильно реализованы?