我正在尝试实现一个向量,我已经读过最好的实现使用了allocator类(内存头文件)。我不知道它是什么,网站cplusplus.com根本没有帮助我。
答案 0 :(得分:6)
它是内存管理的抽象。
在C编程中,您基本上使用函数malloc()
和free()
来分配内存块,而无需知道如何分配块。在C ++中,函数是operator new()
和operator delete()
。
std::allocator
是一个采用一个类型参数的模板,它是要分配的对象类型。 std::allocator
的实例化在内部使用operator new()
和operator delete()
,但std::allocator<T>
具有关于T
的信息的事实意味着它知道如何构造和销毁T
{1}}对象。
std::allocator<T>
的四个基本功能是:
allocate(size_type n)
使用operator new()
为n * sizeof (T)
个字节分配空间。请注意,没有构造分配的n
T
个对象;与new T()
不同,它为一个T
对象分配空间而调用无参数构造函数,allocate(size_type n)
仅为n
{{分配空间1}}对象。您需要使用T
来明确构造每个。
construct()
使用deallocate(pointer p, size_type n)
释放先前调用operator delete()
返回的内存。请注意,allocate()
仅释放空间。您必须在每个deallocate()
destroy()
个对象上明确调用n
,否则您可能会泄漏内存。
T
为位于construct(pointer p, const T& val)
的{{1}}对象调用T
副本构造函数。
T
在位于p
的{{1}}对象上调用destroy(pointer p)
析构函数。
答案 1 :(得分:0)
这是一个对标准库容器类进行内存管理的类
但是,如果要提供自己的内存管理,可以执行此操作,std::allocator
提供默认的内存管理。