Статический класс в C++

Компьютеры программирование C++ Namespace static class

Создаю аналог статического класса в C++ при помощи namespace. Он выглядит приблизительно так (без разбиения на .h и .cpp):

namespace MyClass {

// public'и
...

namespace {
// private'ы
...
SomeType some_var = initial_value;

}

void setSomeVar ( SomeType new_value ) {
some_var = new_value;
}

}

Столкнулся с непонятным эффектом: когда я вызываю setSomeVar в какой-нибудь функции и т.о. присваиваю some_var какое-то новое значение, оно сохраняется в ней до тех пор, пока выполняется вызвавшая setSomeVar функция, сразу после выхода из неё значение меняется на initial_value или 0, если initial_value не задано (всё это наблюдается в отладчике QtCreator'а). Это происходит со всеми переменными внутри указанного namespace'а; то же самое, если вместо безымянного namespace'а использовать модификатор static, то же самое, если напрямую менять значение переменной. Многопоточности нет, поэтому асинхронное изменение исключено. На пробном проекте повторить ошибку не удалось.

В чём может быть ошибка? Возможно у инициализации переменных в namespace'ах есть какие-то особенности?

Примечание:
overloop, пересобирал - бестолку.
Интересует именно вариант с неймспейсами - без классов, приватных конструкторов и т.д.

Примечание:
Без имени (новый пользователь), не синглтон а как-бы статический класс.
Почему обязательно извращение? По-моему писать класс только и закрывать конструктор - не меньшее извращение.
Жаль, что нельзя, как в C#: static class - и вперёд.

Примечание:
*только со статик-членами

Примечание:
Igoor, пожалуй стоит читать вопрос внимательнее.
Antohabm, спасибо, всё получилось.
Для интересующихся сообщаю: ошибка заключалась в том, что для каждой переменной, объявленной в namespace'е объявленном в .h-файле при каждом #include'е этого файла создавался отдельный её экземпляр. Помогло объявление переменных extern'ами и инициализация их в .cpp-файле.
Ответы:
>без разбиения на .h и .cpp
пересобери
Дайте полный код, с вызовом, с методом проверки и т.д. Хоть это и изврат, но он должен работать
А зачем такое извращение?
Сделайте синглтон на основе обычного класса и не изобретайте колеса.
Полный код на http://www.ideone.com/ в студию
>Дополнение #2 06.08.2011 11:11:54
>Без имени (новый пользователь), не синглтон а как-бы статический класс.
>Почему обязательно извращение?
потому что это если не извращение, то маразм какой-то делать аналог того, что есть аналогом, упрощенным и ограниченным static в с++, для начала напишите зачем это вам нужно, ну и код соответственно.
может попробовать перед переменными использовать static...


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.