La adición de un shared_ptr a mi mapa lanza violación de acceso de lectura

votos
2

Así que estoy trabajando en la construcción de un motor de juego en C ++, simplemente con fines de aprendizaje. Estoy tratando de seguir un sistema de componentes Entidad y estoy teniendo un problema cuando agrego componentes a mi entidad.

En mi clase de entidad que quiero para contener todos los componentes de esa entidad en: std::map<type_index, std::shared_ptr<Component>> components;

Al agregar un componente tengo este método en el archivo .h de mi clase de entidad:

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;
}

en el mismo método también he hecho algunas cosas diferentes como intentar agregar componentes al igual que components[std::type_index(typeid(*component))] = component;en lugar de utilizar emplace y luego también he intentado std::moveel componente en el mapa.

Mi error exacto es:

    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
Publicado el 15/09/2018 a las 23:26
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more