vector/map 如何使用指向一个对象的多个指针

How to use multiple pointers to an object by vector/map

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

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

像这样互相分配指针是好习惯吗?

矢量 and/or 映射应该保存地址吗?或者我应该使用指向地图指针的指针吗?

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

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

首先,这个:

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;

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


如果我是你,我会重新设计我的方法,因为你的代码不够干净,更不用说你的逻辑了;某人需要一两分钟才能了解所有指针和共享位置的情况。