basic_string专有分配器

时间:2014-06-22 18:49:16

标签: c++ stdstring

我正在评估使用basic_string模板来实现一个类似于使用外部内存管理器分配的对象的字符串。 该内存管理器保持分配的内存的最大大小和当前大小的大小(允许当前大小增加到最大大小)。 为了避免冗余,我想将该数据用于字符串。

是否有人知道是否可能以及在哪里寻找详细说明? 我已经知道有可能给出一个分配器,但仅此而已。

2 个答案:

答案 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类中定义自定义deallocateCustomAllocator(可能还有其他一些)方法(并为其添加所有必需的逻辑)