C ++ часто меняющийся список структур - сохранить только указатели или целые структуры? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть класс для каждой сущности в игре, у которого есть дочерний класс, используемый для управления некоторыми атрибутами этой сущности. Класс управления атрибутами содержит std :: список структур, каждая структура имеет данные об одном атрибуте и несколько простых функций для манипулирования этими данными. Вот некоторый псевдокод, чтобы проиллюстрировать это:

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 голосов
/ 08 ноября 2018

Мои $ 0,02: ваш список «владеет» вашими stAttribute объектами, мне кажется, вполне уместен - обычно так обычно и происходит, и тот факт, что они приходят и уходят часто, не изменит моего взгляда на это.

Однако, изучите функции emplace_xxx, предлагаемые std::list (которые исключают операцию копирования, подразумеваемую, например, push_back), и убедитесь, что std::list является оптимальным контейнером для вашего варианта использования, прежде чем Вы делаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...