allocator类是C++标准库中管理内存的模板类,功能上与C语言中的malloc函数有点类似,但是与C++中的new函数由很大的区别。在分配内存时,allocator只负责分配内存,而new函数则是在分配内存之后在调用构造函数构造一个新的对象。就是说allocator函数吧内存分配和对象创建分开了。 在C++11标准中,allocator在namespace std内(namespace std{class allocator}),因此在使用时要加上命名空间访问,有以下几个常用的成员函数
address //查找指定了其值的对象的地址
allocate //分配大小足以存储至少某个指定数量的元素的内存块
construct //在使用指定值初始化的指定地址处构造特定类型的对象
destroy //从指定位置开始从存储中释放指定数量的的对象
deallocate //调用对象析构函数而不释放存储对象的内存。
max_size //返回在可用内存用完之前,可以由类allocator 的对象分配的类型 Type 的元素数。
rebind //实现分配器以便使一种类型的对象可以为另一种类型的对象分配存储的结构
下面是一个allocator的一个简单的实例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
std::allocator<string> strAlloc;//创建一个string类型的allocator对象
auto p = strAlloc.allocate(3);//分配三个对象的内存
strAlloc.construct(p,"hello ");//构建第一个对象
strAlloc.construct(p+1,"colorful ");//构建第二个对象
strAlloc.construct(p+2,"world!");//构建第三个对象
cout << *p << *(p+1) << *(p+2) << endl;//输出三个对象的内容
strAlloc.destroy(p+2);//销毁对象
strAlloc.destroy(p+1);
strAlloc.destroy(p);
strAlloc.deallocate(p,3);//释放内存
}
输出结果为:
hello colorful world!
以上就是对allocator的简单使用,其他类型的使用也是类似的步骤