gpt4 book ai didi

c++ - 制作变量列表而不复制它们

转载 作者:行者123 更新时间:2023-11-28 02:58:49 24 4
gpt4 key购买 nike

主要问题:
如何创建一个指向可以存储的变量的指针,然后在以后不创建拷贝的情况下访问该变量


下面的内容只是为了回答人们可能有的关于我为什么要这样做的任何问题

序言:
我正在用 DirectX 制作游戏,我想在另一个类中创建实体(特殊类)的“列表”。我想这样做,这样我就可以跟踪游戏中由特定方法渲染的所有对象(一个列表用于三角形,另一个列表用于线条等)。为此,我最初只有一个类(class),它有一个 std::vector<Entity> , 然后类(class)有一个 add(Entity entity)将指定实体添加到 vector 的函数。在我开始尝试对 vector 中的这些实体进行更改之前,这非常有效。

问题:
首先,我会在主世界循环中创建一个实体,Entity testEntity = Entity(position);然后我会把它添加到实体列表中,entityList.add(testEntity); .当调用此命令时,它实际上只是制作实体的拷贝,因为它是调用 add 命令时的样子。这意味着突然有 2 个实体代表 1,主世界中的实体受到所有游戏逻辑的影响,而 entityList 中的实体不更新,呈现。这两者不同步。

想要的效果:
entityList 的 std::vector实际上只是充满了某种指向世界循环中实体的指针。然后,当实体在世界循环中更新时,entityList 具有该实体的相同数据。

最佳答案

我不太清楚你在哪里遇到问题,所以这可能无法回答问题:

您似乎只想存储一个指向 Entity 对象的指针 vector 。 IE。 std::vector<Entity*> .

如果您知道 testEntity 将在 vector 的生命周期内处于范围内,则可以将指向它的指针添加到您的 vector 中。 IE。 entityList.add(&testEntity) .

如果该假设不成立,您可能希望在堆上分配您的 Entity 对象(例如 Entity* testEntityPtr = new Entity(position); 。如果您使用的是 C++11(或者即使您不是),您可能想在这种情况下使用 shared_ptr 和 make_shared。

关于c++ - 制作变量列表而不复制它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com