我正在尝试实现一个 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)
    为位于 TT 对象调用 p 复制构造函数。
  • destroy(pointer p)
    在位于 TT 对象上调用 p 析构函数。
  • 关于c++ - 什么是分配器<T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10211586/

    10-16 05:14