удаление значения hash_map - PullRequest
1 голос
/ 06 июня 2011

Мой вопрос касается управления памятью.

Я получил этот контейнер:

typedef hash_map<const string, Powerdomain*, strptrhash, strptrequal> PowerdomainHashMap;  

теперь я добавляю в него один элемент

PowerdomainHashMap powerdomainMap;
Powerdomain* pd1=new Powerdomain("Powerdomain1");
powerdomainMap.insert(Powerdomain_pair(pd1->getName(),pd1));  

После этого моя программа делает первый шаг.

Теперь, когда первый шаг сделан, мне больше не нужны домены власти и я хочу их удалить.

Достаточно ли powerdomainMap.clear()? Будет ли он уничтожать все записи значений на карте (т.е. вызывать delete на каждом Powerdomain * на карте?

(я думаю, это лучше, чем вызывать delete на итераторе на карте, но я не уверен)

Ответы [ 2 ]

5 голосов
/ 06 июня 2011

Нет, не будет - вам нужно перебрать карту и вызвать удаление содержимого самостоятельно.Или еще лучше, используйте карту умных указателей, которая сделает удаление за вас.Другой альтернативой, если вам не нужен полиморфизм, является использование карты имени с значениями , а не указателями, и в этом случае вы можете полностью потерять динамическое управление памятью.

3 голосов
/ 06 июня 2011

Достаточно ли powerdomainMap.clear()?

Нет.Вы приобрели вручную память (используя new), вам необходимо вручную освободить ее (используя delete).Хотя лучше использовать умные указатели вместо сырых указателей (желательно std::shared_ptr).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...