什么是分配器

问题描述:

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

+3

['std :: allocator'](http://en.cppreference.com/w/cpp/memory/allocator) – Praetorian 2012-04-18 14:33:04

这是一个内存管理的抽象概念。

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

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

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

  1. allocate(size_type n)

    用途operator new()n * sizeof (T)字节分配空间。请注意,分配的对象都不构成任何对象;不同于new T(),这两个对象分配一个空间T对象调用无参数构造函数,allocate(size_type n)只分配空间给nT对象。您需要使用construct()来显式构造每一个。

  2. deallocate(pointer p, size_type n)

    用途operator delete()以释放先前调用allocate()返回的内存。请注意,deallocate()只能释放空间。您必须在每个nT对象上明确地调用destroy(),否则您可能会泄漏内存。

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

    呼吁位于pT对象T拷贝构造函数。

  4. destroy(pointer p)

    调用位于pT对象的析构函数T

+0

非常感谢! – 2012-04-18 15:17:34

+0

+1,阅读了一些关于'std :: allocator'的文章和SO答案,但这是我第一次理解它。谢谢 :) – 2016-01-08 16:20:04

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

+1

它执行'默认'内存管理。 – Nick 2012-04-18 14:34:23

+0

是的,但它如何用于矢量实现? – 2012-04-18 14:37:59

+0

@RondogiannisAristophanes:依赖于实现,作为容器的用户,不需要知道。 – 2012-04-18 14:39:22