Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает static 
V
    Опции темы
BearFear
Дата 9.12.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Код
Код

// где то внутри одного хедера
class Class {
public:
    Class() {
        printf("iam %p\n", this);
    }
};
static Class _Class;

// а где то там вне хедера в разных местах подключается этот хедер (файлов реально дофигища! Выкладывать сюда свыше 40 модулей считаю кащунством)


Результат
iam 00433170
iam 00433128
iam 00433104
iam 004330DC
iam 004330B8
iam 00433094
iam 0043306C
iam 00433044
iam 00433020

Вопрос
Почему?

Добавлено через 11 минут и 16 секунд
Как вобще static может позволить создать несколько экземпляров по одному объявлению?
PM MAIL   Вверх
586
Дата 9.12.2012, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата
Результат
iam 00433170
iam 00433128
iam 00433104
iam 004330DC
iam 004330B8
iam 00433094
iam 0043306C
iam 00433044
iam 00433020

Вопрос
Почему?

В каждом cpp-шнике, где подключен этот h-ник, создался экземпляр класса.
PM   Вверх
BearFear
Дата 9.12.2012, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



586, протягивать все через extern?

Добавлено @ 15:53
Или создавать сигнлтон с множеством разнообразных неупорядоченных переменных и объектов используемых везде где только можно? :(

Делать класс статических экземпляров статическим недопустимо, так как на все приложение от силы используется 3-4 объекта статических. Остальные в разных местах уникальны. Блин :( Руки бы выдрать этому кодеру :(

Это сообщение отредактировал(а) BearFear - 9.12.2012, 15:57
PM MAIL   Вверх
BearFear
Дата 9.12.2012, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Нашел одно из решений.
http://www.gamedev.ru/code/forum/?id=20237
PM MAIL   Вверх
BearFear
Дата 9.12.2012, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



А почему для этих целей может не подойти синглтон?

Цитата


const
    Можно применять паттерн синглтон для этого.

Coriolan
    Но не нужно.


Это сообщение отредактировал(а) BearFear - 9.12.2012, 17:11
PM MAIL   Вверх
volatile
Дата 9.12.2012, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(BearFear @  9.12.2012,  16:09 Найти цитируемый пост)
Нашел одно из решений.

Если не озвучена проблема, какое решение вы ждете?

статик ведет себя именно так как и должен вести, т.е. создает в каждом модуле независимую переменную.
Именно это и хотел, тот кто писал код.
А вот что от этого кода ждете вы - никому не известно.

PM MAIL   Вверх
BearFear
Дата 9.12.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2012

Репутация: нет
Всего: нет



Проблема озвучена выше smile Есть масса неиспользуемых объектов smile Я к проекту прикручиваю средства отладки потоков, а точнее некоторые фишки для вывода состояний потоков. Первый запуск показал наличие большого кол-ва неиспользуемых объектов критических секций. На данный момент загнал все с синглтон, теперь создается всего один глобальный экземпляр класса содержащий один объект критической секции с всеобщим доступом. Это КС чтения\записи файла конфигурации, их не предусмотрено множество, их предусмотрено один. В общем вот. Если честно не разу просто не сталкивался с таким, думал что ifndef и define обезопасивают от таких моментов. Но сей конфуз оказалось не зависит от защиты  ifndef и define. Ошибок данные статики не производили, множественное кол-во статиков обнаружил скажем так случайно, при запуске проги с своеобразными (мно написанными) макрос-конфигами. Оказалось что где то в исходниках валяется хедер содержащий это объявление. В общем все ок, все решилось. Всем спасибо за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.