Относительно двух вопросов, которые вы буквально задаете,
да, C ++ имеет понятие имен разных видов, сосуществующих в той же области, что и в C, и
да, когда включен соответствующий заголовок, код прекрасно компилируется с MinGW g ++ 4.4.1, Visual C ++ 10.0 и Comeau Online 4.3.10.1.
Если вы сомневаетесь в том, что какой-то фрагмент кода соответствует стандарту, на практике просто отправьте его в Comeau Online .
То, что код технически в порядке, не означает, что все в порядке ...: -)
Singleton используется для описания чего-то отличного от глобальной переменной . То, что у вас есть, является глобальной переменной. Ergo, это не синглтон.
Два основных свойства синглтона
существует глобально уникальный экземпляр, а
этот экземпляр создается лениво, по требованию.
Обычно каждый хочет что-то похожее на глобальную переменную, но более управляемое. Каждый хочет более контролируемый порядок создания экземпляров, и ленивое создание помогает в этом. И каждый хочет ограничить количество разрешенных экземпляров, обычно до
Последнее является настолько распространенной причиной использования синглетонов, что, например, Статья Википедии о синглетонах описывает синглтон как "ограничение создания класса одним объектом". Но это упрощенный взгляд. Иногда нужно определенное количество экземпляров, как синглетоны. И, например, для Python нередко описывать значения False
и True
в Python как синглтоны типа bool
. А иногда требуется синглтон (или синглтоны), но при этом допускается произвольная реализация.
В C ++ один особенно простой способ реализации синглтона известен как Meyers 'Singleton . По сути, экземпляр singleton является статической переменной в функции, которая обеспечивает к нему доступ. Обычно это сочетается с запретом общего создания класса, например, с помощью конструктора или всех конструкторов private
, а одноэлементная функция доступа static
функция-член.
Приветствия и hth.,