4

我正在尝试实现一个向量,并且我已经读到最好的实现使用分配器类(内存头文件)。我不知道它是什么,网站 cplusplus.com 根本没有帮助我。

4

2 回答 2

7

它是内存管理的抽象。

在 C 编程中,您基本上使用函数malloc()free()分配内存块,而无需知道这些块是如何分配的。在 C++ 中,函数是operator new()operator delete()

std::allocator是一个模板,带有一个类型参数,即要分配的对象的类型。std::allocator使用operator new()和内部的实例化,但具有关于什么是的信息operator delete()的事实意味着它知道如何构造和销毁对象。std::allocator<T>TT

的四个基本功能std::allocator<T>是:

  1. allocate(size_type n)

    用于operator new()n * sizeof (T)字节分配空间。请注意,n T分配的对象都没有被构造;不像new T(),它既为一个T对象分配空间,调用一个无参数的构造函数,allocate(size_type n)只为n T对象分配空间。您需要使用construct()明确地构造每一个。

  2. deallocate(pointer p, size_type n)

    用于operator delete()释放上一次调用返回的内存allocate()。注意deallocate()只释放空间。您必须显式调用destroy()每个n T对象,否则您可能会泄漏内存。

  3. construct(pointer p, const T& val)

    调用位于 的对象的T复制构造函数。Tp

  4. destroy(pointer p)

    在位于 的对象上调用T析构函数。Tp

于 2012-04-18T14:44:26.293 回答
0

它是一个对标准库容器类进行内存管理的类。
但是,如果您想提供自己的内存管理,您可以这样做,std::allocator提供默认的内存管理。

于 2012-04-18T14:33:53.100 回答