如何通过矢量/贴图使用多个指向对象的指针

时间:2017-09-12 06:51:32

标签: c++ pointers object vector stdmap

我有一个关于使用多个指向对象的问题。 我在向量中有一个指针,在地图中有另一个指针。 地图使用向量来索引对象。示例代码:

class Thing
{
public:
    int x = 1;
};

Thing obj_Thing;

std::vector<Thing*> v_Things;

v_Things.push_back(&obj_Thing);

std::map<int, Thing*> m_ThingMap;

m_ThingsMap[v_Things[0]->x] = v_Things[0]; // crucial part

将指针指向对方是不错的做法?

矢量和/或地图是否应该包含地址?或者我应该使用指向地图的指针吗?

1 个答案:

答案 0 :(得分:4)

这完全取决于你想做什么。

但是,当项目增长时,尤其是当其他人参与其中时,您的方法会变得非常繁琐。

首先,这个:

m_ThingsMap[v_Things[0]->x] = v_Things(0);

应该是:

m_ThingsMap[v_Things[0]->x] = v_Things[0];

此外,将原始指针存储在std::vector中是可能的,但需要特别小心,因为如果指针指向的对象过早释放,则最终可能会出现悬空指针。

为此,我建议您使用std::weak_ptr,如下所示:

std::vector<std::weak_ptr<Thing>> v_Things;

如果您决定坚持使用该方法(我的意思是指针指向一个从另一个指针共享指针的对象)。

如果我是你,我会重新设计我的方法,因为你的代码不够干净,更不用说你的逻辑了;需要一两个时间让某人了解所有指针和共享位置的内容。