我想知道如何正确删除指针std::map
的第一个键。我只能想出第二把钥匙。第一个键只能读取。
示例:
std::map<char*,foo> myMap;
char* str = new char[3];
foo bar;
str[0]='h';
str[1]='i';
str[2]='\0';
myMap[str] = bar
/* some code */
for(auto element: myMap)
{
delete [] element.first;
}
这似乎没有释放指针。 std::map
在某处丢失指针了吗?
我正在研究大数据,所以我需要尽可能轻的字符串结构。这就是为什么我使用char*
而不是std::string
(使用比较器函子给地图)。
修改
更精确:
我希望这可以帮助您理解我的问题。
答案 0 :(得分:1)
您的代码已经可以使用(但不是例外安全 - 智能指针就是这样)。请注意,当内存为delete
d时,程序通常不会浪费时间更改它,它只是更改一些免费/使用中的记录,以便将来的分配可以考虑将内存重用,所以如果你尝试取消引用delete
d指针你有未定义的行为,但它似乎仍然有旧的内容 - 至少有一段时间。我认为这就是为什么你认为解除分配不起作用......
答案 1 :(得分:0)
您的地图有两个元素,您需要删除第一个元素:it->first
是char*
而it->second
是foo
。请尝试以下代码:
for(std::map<char*, foo>::iterator it = myMap.begin(); it!=myMap.end(); it++)
{
delete[] it->first;
myMap.erase(it);
}
希望有所帮助!
答案 2 :(得分:0)
谢谢大家,您的大量评论有助于解决我的问题。我成功使用了std :: string。我知道,我告诉过你这太重了。但是我找到了méthod reserve(size_t n = 0),它允许我们想要的地方。现在,再也没有泄密了。
再次感谢您的回答!
来源: http://www.cplusplus.com/reference/string/string/reserve/