如何通过向量/地图对对象使用多个指针
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
这样的习惯是这样做的吗?
矢量和/或地图是否保留地址?还是我应该使用指针用于地图的指针?
这一切都取决于您想做什么。
但是,当您的项目增长时,尤其是其他人贡献时,您的方法可能会变得很毛。
从此开始:
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;
如果您决定坚持使用这种方法(我的意思是,如果指针指向来自另一个指针的指针的对象)。
如果我是您,我会重新设计我的方法,因为您的代码不够干净,更不用说您的逻辑了;某人需要一两分钟才能了解所有指针和共享场所正在发生的事情。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它