Создание индекса: копии или указатели? - PullRequest
1 голос
/ 28 июля 2010

У меня есть структура данных, которая хранит ... ну, данные. Теперь мне нужно получить доступ к различным частям данных немного по-другому, поэтому я по сути строю индекс в памяти. Но мне интересно: должен ли указатель содержать указатели или копии?

Чтобы уточнить, скажем, у меня есть

class Widget
{
    // Ways to access the list of gears...
private:
    std::list<Gears> m_gears;
};

Теперь у меня есть два Widget с, и между этими двумя существует сопоставление между Gear с. В настоящее время это

boost::unordered_map<Gear, Gear>

но Gear - довольно здоровенный класс, и я чувствую, что создание такого количества копий - плохой дизайн. Я мог бы сохранить указатель, но тогда сопоставление действительно только для времени жизни соответствующих Widget s, и вы начинаете получать -> s ... (И если этот std::list когда-либо изменится на std::vector становится все сложнее ...)

Что касается копий, то на самом деле это немного хуже: есть два boost::unordered_map s, по одному на каждое направление. Итак, для каждого Gear я делаю до 2 его копий.

В качестве альтернативы, я мог бы поместить индекс в класс Widget, но я чувствую, что это нарушает обязанности класса Widget.

Ответы [ 2 ]

0 голосов
/ 28 июля 2010

Не могли бы вы сохранить все шестерни в одном месте, как статически в классе шестерен, и затем каждый виджет И виджет сохранит только ссылку / индекс на него?

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

0 голосов
/ 28 июля 2010

Вы можете попробовать Boost Pointer Container Library: http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html

Я думаю, что она решает именно ту проблему, с которой вы столкнулись.

...