什么是allocator <t> </t>

时间:2012-04-18 14:30:24

标签: c++

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

2 个答案:

答案 0 :(得分:6)

它是内存管理的抽象。

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

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

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

  1. allocate(size_type n)

    使用operator new()n * sizeof (T)个字节分配空间。请注意,没有构造分配的n T个对象;与new T()不同,它为一个T对象分配空间而调用无参数构造函数,allocate(size_type n)仅为n {{分配空间1}}对象。您需要使用T来明确构造每个。

  2. construct()

    使用deallocate(pointer p, size_type n)释放先前调用operator delete()返回的内存。请注意,allocate()仅释放空间。您必须在每个deallocate() destroy()个对象上明确调用n,否则您可能会泄漏内存。

  3. T

    为位于construct(pointer p, const T& val)的{​​{1}}对象调用T副本构造函数。

  4. T

    在位于p的{​​{1}}对象上调用destroy(pointer p)析构函数。

答案 1 :(得分:0)

这是一个对标准库容器类进行内存管理的类 但是,如果要提供自己的内存管理,可以执行此操作,std::allocator提供默认的内存管理。