Проблема в вашем методе get.Измените его, как показано ниже, и это должно решить проблему.
return reinterpret_cast<T&>(*(components[std::type_index(typeid(T))].at(id)));
Ваш components[std::type_index(typeid(T))]
возвращает другую карту, а .at()
возвращает std::unique_ptr
.Изначально вы разыгрывали unique_ptr
с использованием reinterpret_cast, что привело к неопределенному поведению.
Пока мы обсуждаем эту тему, не используйте reinterpret_cast для приведения к разным иерархиям.Используйте dynamic_cast
.dynamic_cast
имеет четко определенное поведение при сбое приведения как для ссылок, так и для указателей.
Короче говоря, вы выполняли reinterpret_cast<Position&>(uniquePtrToPosition)
, что является недопустимым C ++.