У меня есть структура данных, которая хранит ... ну, данные. Теперь мне нужно получить доступ к различным частям данных немного по-другому, поэтому я по сути строю индекс в памяти. Но мне интересно: должен ли указатель содержать указатели или копии?
Чтобы уточнить, скажем, у меня есть
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
.