我有一个关于使用多个指向对象的问题。 我在向量中有一个指针,在地图中有另一个指针。 地图使用向量来索引对象。示例代码:
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
将指针指向对方是不错的做法?
矢量和/或地图是否应该包含地址?或者我应该使用指向地图的指针吗?
答案 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;
如果您决定坚持使用该方法(我的意思是指针指向一个从另一个指针共享指针的对象)。
如果我是你,我会重新设计我的方法,因为你的代码不够干净,更不用说你的逻辑了;需要一两个时间让某人了解所有指针和共享位置的内容。