std::allocator是c++中的一个允许我们将内存分配和初始化构造分隔开的类,它有时候能给我们提供更好的性能和更灵活的内存分配能力。
new和delete有一些灵活性上的局限性,具体表现在其将内存分配和初始化构造及析构和内存释放组合在了一起,我们在实例化一个对象或者销毁一个对象时,当然是希望将其组合在一起的,但是当我们分配一块大内存的时候,我们计划在这块内存上按需构建对象,这时候我们就希望将前面提到的两者间分隔开,std::allocator就是满足这方面需求的一个类。通常情况下,将内存分配和初始化构造组合在一起可以节省不必要的浪费。
std::allocator定义在头文件<memory>中,它提供了一种类型感知的内存分配方式,它分配的内存是原始的、未构造的。类似于vector,它是一个模板类。为了定义一个allocator对象,我们必须指明这个allocator可以分配的对象类型。当一个allocator对象分配内存时,它会根据给定的对象类型来确定恰当的内存大小和对齐位置。allocator支持的操作,如下:
allocator<T> a | 实例化一个可以分配T类型对象的allocator对象。 |
---|---|
a.allocator(n) | 分配一段原始的、未构造的内存,保存n个类型的对象。 |
a.deallocator(p,n) | 释放类型T*的p中开始的内存,这块内存保存了n个T*类型的对象,其n必须与先前调用allocator时的n相同,其p的类型也必须是allocator返回的指针,在调用deallocator之前必须调用每个在这块内存块创建的对象的析构函数。 |
a.construct(p,args) | p必须是T*类型的指针,args被传递给类型T*的构造函数,意在给p指向的内存构造对象。 |
a.destroy(p) | p必须是T*类型的指针,意在给p指向的内存块进行析构。 |