Я читал о нитевидных одноэлементных моделях здесь:
http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29
И он говорит внизу, что единственным безопасным способом является использование pthread_once - который недоступен в Windows.
Является ли метод только гарантировать безопасную инициализацию потоков?
Я прочитал эту тему на SO:
Решить безопасную ленивую конструкцию синглтона на С++
И, кажется, намекает на функцию замены и сравнения уровня атомной ОС, которую я предполагаю в Windows:
http://msdn.microsoft.com/en-us/library/ms683568.aspx
Может ли это делать то, что я хочу?
Изменить: Мне нужна ленивая инициализация, и только там будет только один экземпляр класса.
Кто-то на другом сайте, упомянутом с использованием глобальной внутри пространства имен (и он описал одноэлемент как анти-шаблон) - как это может быть "анти-шаблон"?
Принятый ответ:
Я принял Josh answer, поскольку я использую Visual Studio 2008 - NB: для будущих читателей, если вы не используете этот компилятор (или 2005) - Дон ' t используйте принятый ответ!
Edit: Код работает отлично, за исключением оператора return - я получаю сообщение об ошибке: ошибка C2440: "return": невозможно преобразовать из "volatile Singleton *" в "Singleton *". Должен ли я изменить возвращаемое значение как volatile Singleton *?
Изменить: По-видимому, const_cast < > удалит изменчивый классификатор. Еще раз спасибо Джошу.