Бесполезный фон: я нахожусь на своей N-й итерации, работая над настройкой движка игры на основе сущности/компонента. У меня достаточно кода, написанного сейчас, так что я могу начать тестирование некоторых вызовов функций. Нечетное поведение, которое я вижу, это то, что члены экземпляра устанавливаются в разные значения, чем я ожидаю, но они всегда одинаковы для запуска. В какой-то момент приведенный ниже пример кода привел к отображению двух последовательных целых чисел, но теперь отображаются два не последовательных целых числа, и я не уверен, почему.Данные членов, перезаписанные на экземпляре стека
Проблема: Я разрабатываю систему сущностей, которая опирается на дескрипторы, поэтому я могу хранить однородные данные, собранные в памяти, чтобы избежать промахов в кеше (чтение: содержится в виде копий в векторах). Однако для двух последовательно созданных объектов я получаю радикально разные значения дескрипторов, когда они должны быть последовательными. Код, который проверяет такое поведение:
#include <dbes/engine.h>
#include <iostream>
int main(int argc, char **argv) {
Engine engine(10000);
Handle e1 = engine.createEntity();
Handle e2 = engine.createEntity();
std::cout << "e1: " << (unsigned int)e1 << " e2: " << (unsigned int)e2 << std::endl;
return 0;
}
код библиотеки доступен here.
Выход:
e1: 50331648 e2: 33564418
Когда я пошагово вызова, члены экземпляра m_handleManager
внутри экземпляра Engine
на втором вызове createEntity()
, кажется, все изменилось. Когда я отладки в затмении значения следующие: (Они все их ожидали, инициализируются значения по первому зову)
m_maxEntries : 4294959264
m_activeCount: 32767
m_firstFreeIndex: 9986
Следует отметить, что возвращение от первого звонка до createEntity()
всегда шаги мне через d'tor вектора. Я уверен, что это связано с моей проблемой, но я не могу понять, почему.
Никто не собирается загружать весь ваш код и отлаживать его для вас. Сожалею. – OldProgrammer
Особенно если вы * изменили код, который вы загрузили. У источника на GitHib есть конструктор для 'Engine (unsigned int maxHandles);' as private. Итак, 'Engine engine (10000),' не должен даже компилировать *. Предполагается, что только один синглет управляется статическими членами класса. – WhozCraig
Хорошо, спасибо, что указали мою глупость. Однако _I_ не изменил код. [Создание с кодом, предоставленным точно так же, как и в сообщении] (http://imgur.com/OO7JtN5) – TheBurrito