我正在尝试实现一个向量,我已经读过最好的实现使用allocator类(内存头文件).我不知道它是什么,网站cplusplus.com根本没有帮助我.
它是内存管理的抽象.
在C编程中,您基本上使用这些函数malloc()
并free()
分配内存块,而无需知道如何分配块.在C++中,函数是operator new()
和operator delete()
.
std::allocator
是一个采用一个类型参数的模板,它是要分配的对象类型.的实例std::allocator
使用operator new()
和operator delete()
内部,但事实上std::allocator<T>
有资料什么T
是意味着它知道如何构建和销毁T
对象.
四个基本功能std::allocator<T>
是:
allocate(size_type n)
用于operator new()
为n * sizeof (T)
字节分配空间.注意,没有n
T
构造分配的对象; 不像new T()
,它为一个T
对象分配空间并调用一个无参数构造函数,allocate(size_type n)
只为n
T
对象分配空间.您需要使用construct()
显式构造每个.
deallocate(pointer p, size_type n)
用于operator delete()
释放先前调用返回的内存allocate()
.请注意,deallocate()
只释放空间.您必须显式调用destroy()
每个n
T
对象,否则可能会泄漏内存.
construct(pointer p, const T& val)
调用位于T
的T
对象的复制构造函数p
.
destroy(pointer p)
T
在T
位于的对象上调用析构函数p
.