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;
如果您决定坚持使用该方法(我的意思是如果指针指向一个与另一个指针共享指针的对象)。
如果我是你,我会重新设计我的方法,因为你的代码不够干净,更不用说你的逻辑了;某人需要一两分钟才能了解所有指针和共享位置的情况。
我对使用指向一个对象的多个指针有疑问。 我在矢量中有一个指针,在地图中有另一个指针。 地图使用矢量来索引对象。示例代码:
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;
如果您决定坚持使用该方法(我的意思是如果指针指向一个与另一个指针共享指针的对象)。
如果我是你,我会重新设计我的方法,因为你的代码不够干净,更不用说你的逻辑了;某人需要一两分钟才能了解所有指针和共享位置的情况。