Вы делаете:
Model soldier(id, model, SOLDIER); //1
modelMap[id] = soldier; //2
Что здесь происходит?
1. Новый объект создан с использованием предоставленного вами конструктора.
2. Так называемый так называемый конструктор копирования оператор копирования назначается для копирования soldier
в modelMap[id]
. Вы не определили свой собственный конструктор копирования оператор назначения копирования, поэтому компилятор создает для вас одно значение по умолчанию, в большинстве случаев это просто копирование побайтной байтовой всей структуры данных на новый адрес памяти , Однако у вас есть вектор указателей в вашем классе, поэтому компилятор должен вызывать конструктор копирования вектора ... И я не знаю (возможно, кто-то с большим опытом точно знал бы, что происходит сейчас), каков результат copy- конструктор, я не знаю, четко ли стандарт определяет «конструктор копирования по умолчанию».
Так что вполне возможно, что вся структура скопирована в modelMap[]
, но с некоторыми случайными данными.
Если вы создаете конструктор копирования (его объявление в вашем случае будет выглядеть примерно так: Model::Model(const Model& myModel);
, конструктор копирования всегда будет ссылаться на объект своего типа в качестве аргумента) Если вы переопределите назначение копирования оператор (лучше всего, если вы делаете обе вещи), вы можете контролировать все, что делается при копировании вашего объекта в другую переменную / объект.
Скачать, например. Брюса Экеля * Думая на C ++, V. 1 [1], или ищите где-нибудь в сети, как это сделать (возможно, это будет хорошо, не читал всю статью, http://www.learncpp.com/cpp-tutorial/911-the-copy-constructor-and-overloading-the-assignment-operator/).
[1] Доступно для скачивания на его сайте mindview.net. Как новый пользователь, я могу вставить только одну ссылку, поэтому не могу связать ее здесь самостоятельно: P.