Ну, у вас есть карта указателей на динамически размещенные объекты класса Powerdomain
.
Хеш-карта сама по себе не выделяла эту память, поэтому она не очищает ее для вас.
Что вам нужно сделать, так это освободить эту память самостоятельно, если она вам не нужна, например:
for (PowerdomainHashMap::iterator i = powerdomainMap.begin (),
e = powerdomainMap.end (); i != e; ++i)
{
delete i->second;
}
powerdomainMap.clear ();
Вы, вероятно, никогда этого не делали, и Вальгринд рассказал вам о том, что память все еще доступна после завершения программы.
Теперь, если вам действительно нужны эти данные в течение срока службы вашего приложения, тогда все в порядке, потому что ОС все равно очистит эту память, когда программа завершит работу. Но, конечно, гораздо лучше сделать чистое отключение, чтобы, когда эти проблемы стали реальной проблемой, вы не игнорировали их, плохо относясь к нормальному поведению.
Кроме того, похоже, что вы все равно делаете копии объектов, поэтому я думаю, что стоит подумать о том, чтобы явно не работать с динамической памятью, и пусть hash_map беспокоится об этом. Объявление типа данных будет выглядеть так:
typedef hash_map<const string, Powerdomain, strptrhash, strptrequal> PowerdomainHashMap;
typedef pair<const string, Powerdomain> Powerdomain_pair;
Надеюсь, это поможет.