【发布时间】:2016-11-29 06:49:49
【问题描述】:
在堆上声明一个std::unordered_map,对其执行一些操作,然后释放它的语法是什么?我在做:
std::unordered_map<int32_t, int32_t> *map_temp_last_close = new std::unordered_map<int32_t, int32_t>;
*(map_temp_last_close[val]) = *(int32_t*)(read_buffer + 30); //this happens multiple times in a loop
int32_t some_val = val * (*(map_temp_last_close[val]))
map_temp_last_close->clear();
delete(map_temp_last_close);
编辑:
为什么我需要把它放在堆上?我有一个始终运行的函数,它不断地从网络接收数据,在某些情况下,将数据存储在地图中以进行处理。一旦地图的使用结束,我知道我不会在我的协议中再次收到该消息,因此不需要地图,但地图并没有超出范围,因为函数处于无限循环中(阻塞时网络阅读)。所以我想通过调用free 或delete 或其他方式来释放内存。
【问题讨论】:
-
为什么需要在堆中这样做?为什么不在堆栈中?
-
@SergeRoussak 查看编辑。
-
@user2635088:本地堆栈变量(正式地,具有自动存储持续时间的本地变量)在封闭范围的末尾被销毁,它可以小于函数。使用
{}在函数内创建范围。或者,就像您已经在做的那样,在map上调用clear(),这将恢复重要的资源(sizeof (unordered_map)可以忽略不计,相关的堆数据可能大到足以引起关注,并且clear()应该注意这一点)。 -
你是说,你是从另一个线程中删除地图吗?如果是这样,您应该非常小心 - 确保您在两个线程之间使用了同步原语。
-
@BenVoigt 明白了。我认为
clear应该这样做。谢谢
标签: c++ pointers heap-memory unordered-map