我正在尝试实现一个向量,并且我已经读到最好的实现使用分配器类(内存头文件)。我不知道它是什么,网站 cplusplus.com 根本没有帮助我。
2 回答
它是内存管理的抽象。
在 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
它是一个对标准库容器类进行内存管理的类。
但是,如果您想提供自己的内存管理,您可以这样做,std::allocator
提供默认的内存管理。