覆盖新的,但告诉unordered_map不使用它
-
11-10-2019 - |
题
我正在为C/C ++编写垃圾收集器作为编程练习,其中一部分涉及全球范围 new
. 。但是,垃圾收集器也使用 unordered_map
(将指针存储到分配的块中),如果地图试图使用覆盖的新块,事情就会被严重弄乱(我认为它将尝试无限地循环)。为了创建它,我想使用新的位置,以避免将被覆盖的新召唤出来:
void *buffer = malloc(sizeof(unordered_map<void *, mem_t *>));
unordered_map<void *, mem_t *> map = new(buffer) unordered_map<void *, mem_t *>();
(mem_t是我定义的结构,但我认为这是不相关的。我认为使用新的位置可以解决这个问题,但显然不是。我很确定unordered_map在内部打电话给新的。会给它一个分配器(我该怎么做?)解决此问题吗?如果没有,这个问题是否可以解决?
解决方案
完整的声明 unordered_map
, ,以及所有STL容器的 allocator
作为最后一个参数:
template<class Key, class Ty, class Hash, class Pred, class Alloc>
class unordered_map;
那就是容器为其所有内部结构提供内存的地方。您可能想在这里实施自己的分配器。 维基百科 看起来是一个不错的起点。
不隶属于 StackOverflow