修改指针属性

时间:2013-12-27 18:16:44

标签: c++ pointers

我有一个unordered_map。

unordered_map <string,Object> m_map;

当我创建一个新对象并将其插入无序映射时。

m_object = new Object();
m_materials["Example"]=*m_object;

它可以修改进入无序地图的m_object而无需访问unordered_map吗?

由于

2 个答案:

答案 0 :(得分:2)

不,您不是存储指向对象的指针而是直接存储对象,因此您需要访问存储在unordered_map节点中的实例。

当你这样做时

m_materials["Example"]=*m_object;

解除引用运算符会将指针转换为在unordered_map内复制的真实对象。除非你做delete m_object,否则你甚至会泄密。

使用指针,您可以执行以下操作:

MyObject *object = new Object();
unordered_map<string, MyObject*> mapping;
mapping["foobar"] = object;

object->attribute = something_else;
assert(mapping["foobar"]->attribute == something_else);

在这种情况下,您存储指向对象的指针,因此在您拥有存储在地图中的有效MyObject实例的地址之前,您可以修改它并且修改反映到地图内的对象(因为没有真实对象,但只是指向同一对象的指针。)

答案 1 :(得分:0)

地图包含Object指向的m_object的副本。所以,不,你不能修改通过Object指针插入地图的m_object。除非Object类具有某种共享语义,否则不会。