2014-12-07 3 views
0

Мне нужно воссоздать карту каждый раз, а не просто ссылаться на уже созданную.Карты и указатели C++

Это работает:

void render(Scene *scene) { 

    map<std::string, Node*> _map = scene->getNodes(); // I don't want recreate the map every time. It is slowing down the render function :(
    for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

Но это не ....

void render(Scene *scene) { 

    //map<std::string, Node*> _map = scene->getNodes(); 
    for(auto outer_iter = scene->getNodes().begin(); outer_iter!= scene->getNodes().end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

Я не понимаю, почему это происходит на самом деле.

Как я могу просто ссылаться на карту, которая находится в Сцене, не воссоздавая ее каждый раз?

+0

Что ошибка является этим показателем? – Conduit

+0

'map ' такой дизайн вызывает больше для [управляемого указателя] (http://en.cppreference.com/w/cpp/memory) IMHO. –

ответ

2

возвращает карту по константной ссылке и изменениям в const map<std::string, Node*> &_map:

class Scene{ 
    map<std::string, Node*> map; 
public: 
    const map<std::string, Node*>& getNodes() const{ 
     return map; 
    } 
} 

void render(Scene *scene) { 

    const map<std::string, Node*> &_map = scene->getNodes(); 
    for(auto outer_iter = _map.begin(); outer_iter!= _map.end(); ++outer_iter) { 
     outer_iter->second->draw(*scene->getCamera()); 
    } 
} 

Это позволит избежать повторного копирования, каждый render вызова и просто действует на карте п

+0

спасибо !! Он работает сейчас :) –

Смежные вопросы