我有一个存储......好的数据结构。现在,我需要以稍微不同的方式访问各种数据,因此我实际上构建了一个内存中的索引。但我想知道:索引应该保留指针还是副本?
详细说明,我说
class Widget
{
// Ways to access the list of gears...
private:
std::list<Gears> m_gears;
};
现在,我有两个Widget
,这两者之间存在Gear
之间的映射。目前,这是
boost::unordered_map<Gear, Gear>
但Gear
是一个相当沉重的课程,我觉得制作这么多副本是糟糕的设计。我可以存储一个指针,但是映射只对相应的Widget
的生命周期有效,并且你开始得到->
...(如果那个std::list
发生了变化到std::vector
,它变得更复杂......)
与副本有关,它实际上稍差:有两个boost::unordered_map
个,每个方向一个。因此,对于每个Gear
,我最多可以复制2份。
或者,我可以将索引放在Widget
类中,但我觉得这违反了Widget
类的职责。
答案 0 :(得分:0)
您可以尝试使用Boost指针容器库:http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html
我认为它完全解决了你所面临的问题。
答案 1 :(得分:0)
您可以将所有齿轮存储在一个位置,例如静态地存储在齿轮类中,然后让每个映射AND小部件仅存储参考/索引吗?
你必须跟踪每个装备的参考,以便你知道什么时候可以处理它们,但这应该很容易。