gpt4 book ai didi

c++ - 将 std::set 连接到内存池

转载 作者:太空狗 更新时间:2023-10-29 23:09:10 29 4
gpt4 key购买 nike

我目前正在试验自定义分配器。我有一个 small application实现带有内存池的自定义分配器。

它适用于 std::vector 但是当我尝试使用 std::set 时我得到一个运行时错误:

typedef std::set<Data, std::less<Data>, my_allocator<Data> > PoolSet;

Pool<Data> pool(1024);
PoolSet set;
set.insert(Data()); // error: no pool found for type: std::_Rb_tree_node<Data>

问题是 std::set 将我的分配器用于数据和数据节点。由于没有为数据节点注册的池,因此代码将失败。

详细信息可以在 code 中找到.

有谁知道我如何解决这个问题?

最佳答案

这是 rebind @BenVoigt 提到。

http://en.wikipedia.org/wiki/Allocator_(C++)

Allocators are required to supply a template class member template
<typename U> struct A::rebind {
typedef A<U> other; };
, which enables the possibility of obtaining a related allocator, parametrized in terms of a different type. For example, given an allocator type IntAllocator for objects of type int, a related allocator type for objects of type long could be obtained using IntAllocator::rebind<long>::other.

关于c++ - 将 std::set<T> 连接到内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399823/

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