我正在尝试实现一个 vector ,并且我读到最好的实现使用分配器类(内存头文件)。我不知道它是什么,网站 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
析构函数。 关于c++ - 什么是分配器<T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10211586/