主要问题:
如何创建指向一个变量的指针,该变量可以被存储,然后在以后用于访问该变量而不创建副本
以下是回答人们可能对我为什么要这样做的任何问题的信息
序幕:
我正在用DirectX制作游戏,我想在另一个类中创建实体的“列表”(特殊类)。我想这样做,以便可以跟踪游戏中由特定方法渲染的所有对象(一个列表代表三角形,另一个列表代表线条,等等)。为此,我最初只有一个类,它有一个std::vector<Entity>
,然后该类具有一个add(Entity entity)
函数,该函数会将指定的实体添加到向量中。直到我开始尝试对向量中的这些实体进行更改之前,这一直很好。
问题:
首先,我将在主世界循环中创建一个实体Entity testEntity = Entity(position);
,然后将其添加到实体列表entityList.add(testEntity);
中。调用此命令时,实际上实际上是在复制add命令时复制实体。这意味着突然有2个实体代表1,主世界中的实体正受到所有游戏逻辑的影响,而EntityList中的实体没有更新,而是呈现。这两个不同步。
理想的效果:
实际上,entityList的std::vector
只是某种指向世界循环中实体的指针。然后,当实体在世界循环中更新时,entityList具有与该实体相同的数据。
最佳答案
对于您在哪里遇到麻烦,我还是不太清楚,因此这可能无法回答问题:
似乎您只想存储指向Entity对象的指针向量。即std::vector<Entity*>
。
如果您知道testEntity将在向量的整个生命周期范围内,则只需将指向它的指针添加到向量即可。即entityList.add(&testEntity)
。
如果该假设不成立,则可能要在堆上分配Entity对象(例如Entity* testEntityPtr = new Entity(position);
。如果您使用的是C ++ 11(或者即使您不是)),则可能要使用在这种情况下,shared_ptr和make_shared。