gpt4 book ai didi

c++ - 删除指针作为 std::map 的第一个键

转载 作者:行者123 更新时间:2023-11-30 05:44:38 25 4
gpt4 key购买 nike

我想知道如何正确删除作为 std::map 的第一个键的指针。我只能为第二个键弄清楚这一点。第一个 key 只能读取。

例子:

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 (为 map 提供了一个比较仿函数)。

编辑

为了更精确:

  • 我正在阅读 ADN 序列。对于我正在阅读的每个模式,我将其位置放在 map 中。(std::map>)
  • 我正在使用 char*,因为 std::string 分配的 char 数量超过了所需数量
  • 我的首要任务不是计算时间,而是内存空间。

我希望这能帮助您理解我的问题。

最佳答案

您的代码已经可以运行(但不是异常安全的——智能指针应该是)。请注意,当内存被 deleted 时,程序通常不会浪费时间更改它,它只会更改一些空闲/正在使用的记录,以便将来的分配可以考虑重用该内存,所以如果您尝试取消引用 deleted 指针你有未定义的行为,但它可能看起来仍然有旧内容 - 至少有一段时间。我想这就是您认为重新分配不起作用的原因....

关于c++ - 删除指针作为 std::map 的第一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com