我有一个unordered_map。
unordered_map <string,Object> m_map;
当我创建一个新对象并将其插入无序映射时。
m_object = new Object();
m_materials["Example"]=*m_object;
它可以修改进入无序地图的m_object而无需访问unordered_map吗?
由于
答案 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
类具有某种共享语义,否则不会。