我有一个键/值指针映射:
std::map<A*, B*> myMap;
仅释放 key 内存的正确方法是什么?
我正在考虑这样做:
for (auto itr = _myMap.begin(); itr != _myMap.end(); itr++)
{
if (certainCondition == true)
{
delete itr->first;
itr->first = nullptr;
}
}
这是正确的做法吗?我的 map 是否会将 nullptr
保留为键并且 future 的迭代将包含 nullptr
?
最佳答案
您不能修改容器的键,因为它用于定义排序并且就地更改它可能会使排序无效。此外,每个键都必须是唯一的。因此,您需要从 map 中删除项目,然后清理内存。
如果您已经有 key :
myMap.erase(key);
delete key;
如果 map 中已有迭代器:
A* keyCopy = itr->first;
myMap.erase(itr);
delete keyCopy;
编辑
根据您更新的问题:
auto itr = myMap.begin();
while (itr != myMap.end())
{
if (certainCondition == true)
{
A* keyCopy = itr->first;
itr = myMap.erase(itr);
delete keyCopy;
}
else
{
++itr;
}
}
关于c++ - 如何正确删除指针映射作为键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411758/