I have a data structure that stores ... well, data. Now, I need to access various pieces of data in slightly different manner, so I'm essentially building an in-memory index. But I'm wondering: should the index hold pointers or copies?
To elaborate, say I have
class Widget
{
// Ways to access the list of gears...
private:
std::list<Gears> m_gears;
};
Now, I have two Widget
s, and there exists between these two a mapping between their Gear
s. Currently, this is
boost::unordered_map<Gear, Gear>
but Gear
is a fairly hefty class, and I feel like making so many copies is poor design. I could store a pointer, but then the mapping is only valid for the lifetime of the corresponding Widget
s, and you start getting ->
s... (And if that std::list
ever changes to a std::vector
, it gets more complex...)
Pertaining to the copies, it's actually slightly worse: There's two boost::unordered_map
s, one for each direction. So, for each Gear
, I'm making up to 2 copies of it.
Alternatively, I could put the index inside the Widget
class, but I feel like this violates the responsibilities of the Widget
class.