例如:
map<string, Person*> family;
family["Bill"] = new Person();
family["Jill"] = new Person();
...
// vvv does not work vvv
for (Person* person: family)
delete person;
我试图通过地图执行for-each循环以释放所有指针的内存。这适用于矢量,但不适用于地图。我怎样才能做到这一点?
答案 0 :(得分:1)
for( auto const& pair : family )
{
cout << pair.first << " represented by object at " << (void*)pair.second << "\n";
}
不要使用循环来删除对象,而是考虑直接存储对象而不是指向动态分配对象的指针。
以下是删除所有Person
个对象并删除其地图条目的一种方法:
while( not family.empty() )
{
auto const it = family.begin();
delete it->first;
family.erase( it );
}
如果您存储Person
个对象(不是指向动态分配对象的指针),则会缩减为
family.clear();