Изменить атрибут указателя

0

У меня есть unordered_map.

unordered_map <string,Object> m_map;

когда я создаю новый объект и вставляю его в неупорядоченную карту.

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

Его можно модифицировать m_object, который находится в неупорядоченной карте, без доступа к unordered_map?

благодаря

  • 2
    Почему доступ к карте является проблемой? Обычно это очень быстро.
  • 1
    «Когда я создаю новый Объект и вставляю его копию в неупорядоченную карту перед утечкой исходного Объекта ».
Показать ещё 1 комментарий
Теги:
pointers

2 ответа

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 адрес действительного экземпляра MyObject хранящегося на карте, его можно изменить, а модификация отражает объект внутри карты (поскольку нет реального объекта, а просто указатель к тому же объекту).

  • 0
    Благодаря Джек работает как шарм.
0

Карта содержит копию Object указывает m_object. Итак, нет, вы не можете изменить Object который был вставлен в карту с помощью указателя m_object. Если только класс Object имеет какой-либо семантики разделения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню