代码之家  ›  专栏  ›  技术社区  ›  Nathaniel G.M.

如何通过向量/映射使用指向对象的多个指针

  •  4
  • Nathaniel G.M.  · 技术社区  · 7 年前

    向量中有一个指针,地图中有另一个指针。

    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 回复  |  直到 7 年前
        1
  •  4
  •   gsamaras    7 年前

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

    然而,当您的项目增长时,尤其是当其他人对此做出贡献时,您的方法可能会变得非常复杂。

    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;