使用std :: move将map的value_type移动到向量中可以防止我的Draw函数工作

时间:2016-11-16 12:48:35

标签: c++ opengl

我有一个包含许多数据字段的对象

class Object{
   Texture texture;
   glm::vec2 Position, Size;
   glm::vec3 Colour;

   //constructor goes here

   virtual void Draw(ObjectRenderer &render);
};

我将draw函数定义为:

void Object::Draw(ObjectRenderer &render)
{
    renderer.DrawObj(this->Sprite, this->Position, this->Size,   this->Colour);
}

我的ObjectRenderer类有一个绘制函数,它接受这些参数

void DrawObj(Texture &texture, glm::vec2 position, glm::vec2 size, glm::vec3 colour);  

稍后在我的代码中,我将一个Object instantion插入到一个向量中,并尝试将其渲染到一个openGL上下文中。

vector<Object*> cntr;

cntr.push_back(Object obj);
cntr->Draw(*Render);

现在这个工作,并且Object成功呈现在屏幕上。 (在游戏循环中)。好的,这里很复杂。

然后我拿这个矢量并将其插入地图。

map<std::string, std::vector<Object*>> mapCntr;
map.insert(std::pair<std::string, std::vector<Object*>>("objectCntr", cntr));    

当我的程序处于这种状态时,我可以访问地图容器的value_type,这是存储矢量的地方,并在该矢量中绘制一个元素。

std::map<std::string, std::vector<Object*>>::iterator it;


for (it = cntr.begin(); it != cntr.end(); it++)
{
    if (it->first == "objectCntr")
    {
        for (int i = 0; i != it->second.size(); i++)
        {
            it->second[i]->Draw(*Renderer);
        }
    } 
}

然而,这是问题发生的地方。稍后在我的代码中,我必须获取映射中的向量中的对象,并将其放入临时容器中。我选择我的临时容器作为矢量:

vector<Object*> tmpCntr;

然后我将对象移动到临时向量中:

int i = cntr.find("objectCntr")->second.size() - 1;
tempCntr.push_back(std::move(cntr.find("objectCntr")->second[i]));

此移动成功,我可以访问存储在临时矢量中的对象中的数据字段。

但是我无法再将对象渲染到屏幕上。我尝试了以下代码:

tempCntr[0]->Draw(*Renderer);

没有任何作用。但我知道Object在tempCntr中。如果我删除对象并将其放回到地图中的矢量中,它会再次渲染。

有人可以建议可能是什么原因导致它不呈现?我应该使用不同类型的临时容器吗?

0 个答案:

没有答案