我正在研究动态语言的运行时库,更具体地说是内存分配。
我将使用垃圾收集,但我认为如果需要,允许用户使用自己的内存分配器会很好。但是,在查看standard c++ allocator接口后,我没有看到任何方法有一个通用的分配器(除了通过模板化,但它看起来很hacky)。
注意:我的库使用C ++ 11,所以我在谈论'新'分配器接口。
答案 0 :(得分:1)
取决于您是否需要编译时或运行时多态。标准分配器适用于前一种情况。对于后者,您可以执行以下操作:
class Allocator {
public:
virtual void* allocate(std::size_t size) = 0;
virtual void deallocate(void* p) = 0;
}
用户可以通过虚拟功能自定义分配器。
答案 1 :(得分:1)
正如@Cubbi所说,请看allocator::rebind
。分配器的实际类型参数非常无关紧要。标准容器使用allocator::rebind
更改为实际需要的类型。特别是,关联容器需要分配保存自己数据的节点以及容器名义上保存的数据对象。因此allocator::rebind
用于从allocator<Node<T>>
获取allocator<T>
。