C ++频繁更改的结构列表-仅保留指针还是整个结构?

时间:2018-11-07 23:14:31

标签: c++ memory struct

我为游戏中的每个实体都有一个类,该类具有用于管理该实体某些属性的子类。 属性管理类包含一个std :: list结构体,每个结构体都具有有关单个属性的数据以及一些操作该数据的简单函数。 这是一些伪代码来说明它:

struct stAttribute
{
    /* data & functions */
}

class AttributeManager
{
    std::list<struct stAttribute> attributeList;
    /* ... */
};

class Entity
{
    AttributeManager attribMgr;
    /* .... */
};

int main(void)
{
    Entity ent;

    struct stAttribute newAttrib;
    /* ... */
    ent.attribMgr.attributeList.push_back(x);

    return EXIT_SUCCESS;
}

实体经常在运行时在游戏中创建和删除,属性也是如此。

我开始怀疑是否“静态”创建它们并将整个结构保留在列表中是否是一个不错的选择。我主要关心的是性能。 动态分配内存并仅存储指向结构的指针会更好吗?释放内存没有问题,因为属性的删除是由AttributeManager类处理的。

1 个答案:

答案 0 :(得分:1)

我的0.02美元:让您的列表“拥有”您的stAttribute对象似乎完全适合我-这通常是通常要做的事情,而它们来来往往的事实不会改变我对以下观点的看法那个。

但是,请调查emplace_xxx提供的std::list函数(该函数消除了push_back所隐含的复制操作),并确保std::list是提交给您的用例之前,是最佳的容器。