分配器和重新绑定如何与容器一起使用?

时间:2019-01-28 01:03:54

标签: c++ templates containers allocator

我现在正在学习编写自己的分配器,并尝试通过一些容器类来实现它。问题是我不太了解分配器如何与List容器一起工作。

基本上,我尝试制作一个非常简单的Allocator和List类来启动它。到目前为止,我了解到的是,重新绑定将使我能够为自己的ListNode分配资源。分配和释放将允许我分配内存并返回指向该内存的指针。构造和破坏将在分配的内存处实例化并为特定对象调用析构函数。

  • 如何调用我的重新绑定,以便它可以分配给我的ListNodes?
  • 我的List类中是否需要一个Allocator对象?
  • 我会在列表构造器中调用我的allocate和construct函数,为列表析构器进行dealloc和destruct吗?
  • 还可以有人澄清为什么重新绑定的结构允许我为ListNode分配吗?那里只有一个typedef,所以我不太了解它会如何发生。

随时添加有关分配器的其他信息,您可以为我提供帮助。

感谢您的帮助。谢谢。

template <class T>
class Allocator{
public:

    typedef T value_type;
    typedef T* pointer;
    typedef size_t size_type; 
    typedef T& reference;

    template<class Other>
    struct rebind{
        typedef Allocator<Other> other_type;
    };

    Allocator();
    ~Allocator();

    pointer allocate(size_type n){
         pointer p = ::operator new(n*sizeof(T)); 
         return p;
    };

    void deallocate(pointer p){
        ::operator delete(p);
        return;
    };


     void construct(pointer p, reference value){
        new(p) T(value);
        return;
    };

    void destruct(pointer p){
        p->~T();
        return;
    }      
}; // class Allocator


template<class T>
class ListNode<T>{
private:
    T val;
    ListNode<T>* next;

public:
     ListNode():val(NULL),next(NULL){};
     ~ListNode(){};

}; // class ListNode

template<class T, class Alloc = memory::Allocator<T>>
class List{
private:
    ListNode<T> *head;
    ListNode<T> *tail;
    typedef Alloc<T> A; 

public:

    typedef T value_type;
    typedef T* iterator;
    typedef T& reference;

    List(){};
    ~List(){};
    void insert(T data);
    //.... other random functions etc

}; // class List

0 个答案:

没有答案