我现在正在学习编写自己的分配器,并尝试通过一些容器类来实现它。问题是我不太了解分配器如何与List容器一起工作。
基本上,我尝试制作一个非常简单的Allocator和List类来启动它。到目前为止,我了解到的是,重新绑定将使我能够为自己的ListNode分配资源。分配和释放将允许我分配内存并返回指向该内存的指针。构造和破坏将在分配的内存处实例化并为特定对象调用析构函数。
随时添加有关分配器的其他信息,您可以为我提供帮助。
感谢您的帮助。谢谢。
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