如何通过向量/地图对对象使用多个指针

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

本文关键字:指针 对象 何通过 向量 地图      更新时间:2023-10-16

我有一个关于将多个指针用于对象的问题。我在矢量中有一个指针,而在地图中有另一个指针。该地图使用向量索引对象。示例代码:

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::weak_ptr,这样:

std::vector<std::weak_ptr<Thing>> v_Things;

如果您决定坚持使用这种方法(我的意思是,如果指针指向来自另一个指针的指针的对象)。


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