У меня есть unordered_map.
unordered_map <string,Object> m_map;
когда я создаю новый объект и вставляю его в неупорядоченную карту.
m_object = new Object();
m_materials["Example"]=*m_object;
Его можно модифицировать m_object, который находится в неупорядоченной карте, без доступа к unordered_map?
благодаря
Нет, вы не храните указатели на объекты, а непосредственно объекты, поэтому вам нужно получить доступ к экземпляру, который хранится в узле 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
адрес действительного экземпляра MyObject
хранящегося на карте, его можно изменить, а модификация отражает объект внутри карты (поскольку нет реального объекта, а просто указатель к тому же объекту).
Карта содержит копию Object
указывает m_object
. Итак, нет, вы не можете изменить Object
который был вставлен в карту с помощью указателя m_object
. Если только класс Object
имеет какой-либо семантики разделения.