【发布时间】:2015-06-24 10:49:15
【问题描述】:
我想知道如何正确删除作为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(给地图提供了一个比较函子)。
编辑
为了更精确:
- 我正在阅读 ADN 序列。对于我正在阅读的每个模式,我将其位置放在地图中。(std::map>)
- 我正在使用 char*,因为 std::string 分配的 char 数量超过了所需数量
- 我的首要任务不是计算时间,而是内存空间。
我希望这能帮助你理解我的问题。
【问题讨论】:
-
您确定您没有过早优化吗?你怎么知道一旦你把你需要的所有工作都投入到使用 char* 中,你就不会回到字符串的开销上?
-
你为什么说
it does not seem to work。什么情况下不起作用 -
只需使用
std::map<std::string, foo>。 -
"这似乎没有释放指针。" - 你为什么这么说?它删除数组,在地图中留下一个悬空指针。我不敢想为什么你认为这可能是个好主意;只需使用
std::string。或者unique_ptr<char[]>,如果你真的认为你需要尽可能轻的类型来管理动态数组。 -
你所说的“第一把钥匙”就是钥匙。你所说的“第二个键”就是键对应的值。
标签: c++ pointers c++11 stl stdmap