Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
BorizzK

Экземпляры класса, массив типа map и загрузчик Json

Смысл таков

 

1 Есть класс A хранилка с переменными и массивом типа map<PlayerBase, int>  (используется только во время работы - хранение ссылок на персов игроков  и время в минутах - для конфига не нужен)
   массив определяется с модификатором static что бы он не сохранялся в json (да и не нужно его сохранять) - Ибо при загрузке будет ошибка, тк загрузчик json может работать с подобными массивами если они содержат данные типа string, int и bool (да же float не может)

2 Есть внешний массив R типа этого класса в котором хранятся ссылки на экземпляры класса A

3 Есть класс B где создаются экземпляры класса A, переменным в классе A присваиваются значения и ссылки на экземпляры класса А помещаются в массив R

4 Есть класс C функция которого в последствии сохраняет все значения всех экземпляров класса А в json

5 В последствии если есть сохраненные даненные функция класса C загружает из json все данные в через массив R в содающиеся автоматом экземпляры класса А

 

Проблема следующая

Если в п 3 при создании экземпляров их инициализация проходит классически, все инициализируется как надо, с выполнением конструктора в каждом экземпляре, в каждом классе создается свой уникальный экземпляр массива map и ссылка на него помещается в соответствующую переменную, то при загрузке из json картина более чем странная:

При загрузке данных в массив R

1 Создается нужно количество экземпляров класса A и все правильно помещаются в массив R

2 Все экземпляры уникальны

3 НО! При создании экземпляров конструктор не выполняется!

4 НО! При создании экземпляров массив map  не создается - те полный игнор ref map<PlayerBase,int> R = new ref map<PlayerBase,int>;

 

подумал и перенес R = new ref map<PlayerBase,int>; в отдельную функцию Init() класса A
после загрузки из json в цикле прохожу по массиву R и из каждого экземпляра класса вызываю эту функцию R.Get(i).Init();

Все нормально, все работает, НО!
 

Экземпляр массива map создается 1 раз! в первом экземпляре класса А, во всех остальных ссылка всегд указывает на него же - те нет уникальности

Можно конечно сделать еще один класс для хранения динамических данных, но оч не хочется плодить классы

 

Вопрос в первую очередь комраду Ultima - такое поведение движка это баг или фича? Или это из-за static ?

 

Бегемоты должны быть передушены!
 

 

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0
9 часов назад, NoNameUltima сказал:

Конструктор будет выполнен ВСЕГДА.

Нет

Не будет

Сам проверь

Если как выше из одного класса прогружать из джсон данные в экземпляры через массив

хрена чо будет выполнено

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.