我正在尝试实现一个向量,并且我已经读到最好的实现使用分配器类(内存头文件)。我不知道它是什么,网站 cplusplus.com 根本没有帮助我。
2 回答
它是内存管理的抽象。
在 C 编程中,您基本上使用函数malloc()并free()分配内存块,而无需知道这些块是如何分配的。在 C++ 中,函数是operator new()和operator delete()。
std::allocator是一个模板,带有一个类型参数,即要分配的对象的类型。std::allocator使用operator new()和内部的实例化,但具有关于什么是的信息operator delete()的事实意味着它知道如何构造和销毁对象。std::allocator<T>TT
的四个基本功能std::allocator<T>是:
allocate(size_type n)用于
operator new()为n * sizeof (T)字节分配空间。请注意,nT分配的对象都没有被构造;不像new T(),它既为一个T对象分配空间,又调用一个无参数的构造函数,allocate(size_type n)只为nT对象分配空间。您需要使用construct()明确地构造每一个。deallocate(pointer p, size_type n)用于
operator delete()释放上一次调用返回的内存allocate()。注意deallocate()只释放空间。您必须显式调用destroy()每个nT对象,否则您可能会泄漏内存。construct(pointer p, const T& val)调用位于 的对象的
T复制构造函数。Tpdestroy(pointer p)在位于 的对象上调用
T析构函数。Tp
它是一个对标准库容器类进行内存管理的类。
但是,如果您想提供自己的内存管理,您可以这样做,std::allocator提供默认的内存管理。