Добавление shared_ptr к моей карте приводит к нарушению прав чтения - PullRequest
0 голосов
/ 16 сентября 2018

Так что я работаю над созданием игрового движка на C ++, просто для целей обучения. Я пытаюсь следовать системе компонентов сущностей, и у меня возникают проблемы при добавлении компонентов в мою сущность.

В моем классе сущностей я хочу хранить все компоненты этой сущности в: std::map<type_index, std::shared_ptr<Component>> components;

Когда я добавляю компонент, у меня есть этот метод в файле .h моего класса Entity:

template<typename T, typename... TArgs> 
std::shared_ptr<T> addComponent(TArgs&&... mArgs) {
    std::shared_ptr<T> component(new T(std::forward<TArgs>(mArgs)...)); 
    component->entity = this;
    component->init();

    // This is where the error is being thrown 
    components.emplace(type_index(typeid(*component)), component); 
    return component;
}

тем же способом я также сделал несколько разных вещей, таких как попытка добавить компоненты, такие как components[std::type_index(typeid(*component))] = component; вместо использования emplace, и затем я также попытался std::move компонент на карту.

Моя точная ошибка:

    Unhandled exception thrown: read access violation.
    **std::forward<std::_Tree_node<std::pair<std::type_index const ,std::shared_ptr<Component> >,void *> * &>**(...) returned 0x4. occurred
...