我正在评估使用basic_string模板来实现一个类似于使用外部内存管理器分配的对象的字符串。 该内存管理器保持分配的内存的最大大小和当前大小的大小(允许当前大小增加到最大大小)。 为了避免冗余,我想将该数据用于字符串。
是否有人知道是否可能以及在哪里寻找详细说明? 我已经知道有可能给出一个分配器,但仅此而已。
答案 0 :(得分:3)
有可能,当然。只需提供一个实现std :: allocator(http://www.cplusplus.com/reference/memory/allocator/)接口的自定义分配器。
然后:
typedef std::basic_string<
char, std::char_traits<char>, custom_allocator<char> >
custom_string;
但请注意,此字符串与std :: string不兼容,您可能必须实现转换custom_string&lt; - &gt;的std :: string。
答案 1 :(得分:1)
看起来像这样:
template<class T>
struct CustomAllocator: std::allocator<T> {
template<class U>
struct rebind {
typedef CustomAllocator<U> other;
};
};
typedef std::basic_string<char, std::char_traits<char>, CustomAllocator<char>> CustomString;
现在CustomString
使用您的CustomAllocator
代替std::allocator
。
要更改实际分配内存的方式,您可以在allocate
类中定义自定义deallocate
和CustomAllocator
(可能还有其他一些)方法(并为其添加所有必需的逻辑)