向量中有一个指针,地图中有另一个指针。
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
像这样相互分配指针是一种好做法吗?
向量和/或映射是否应该保留地址?或者我应该为地图使用指针对指针吗?
这完全取决于你想做什么。
然而,当您的项目增长时,尤其是当其他人对此做出贡献时,您的方法可能会变得非常复杂。
m_ThingsMap[v_Things[0]->x] = v_Things(0);
应该是:
m_ThingsMap[v_Things[0]->x] = v_Things[0];
std::vector 这是可能的,但需要特别注意,因为如果指针指向的对象过早释放,则可能会导致指针悬空。
std::vector
为此,我建议您使用 std::weak_ptr ,如下所示:
std::weak_ptr
std::vector<std::weak_ptr<Thing>> v_Things;