其他分享
首页 > 其他分享> > allocator()类

allocator()类

作者:互联网

allocator类

群友之前问了一个问题,C++除了new和malloc还有什么分配内存的方法,当时我在想mmap()、brk()这些系统调用,后来突然想到STL里面有一个allocator类似乎也是做空间分配的。现在来学一学。

new/delete的局限性

抽象的描述new的行为:将内存分配对象构造组合在一起。也就是operator new分配内存,构造函数构造对象。

但有的时候,我们需要将这两个行为分离。比如说,我们先分配一大片内存,然后再内存上构造对象,如果不分离这两个操作,那么我们就会在内存上提前创建大量的对象,但实际上我们不一定需要使用这么多对象。我们期望在我们真正需要时才创建对象。

就像下面这个例子:

string *const p = new string[n];//n个空string
string s;
string *q = p;
while(cin>>s && q != p+n) *q++ = s; //不断输入
const size_t size = q-p;
delete[] p;//销毁

allocator 类

使用时引入#include<memory> 库。

allocator<string> alloc;
auto const p = alloc.allocate(n);

这样我们就可以先分配内存,再逐个创建内存了。

allocator类有这些函数:

//定义一个名为alloc的allocator对象
allocator<T> alloc; 
//分配一段内存,保存n个类型为T的对象,这一段内存是没有构造,返回一个指针指向内存首地址,类型为T*
alloc.allocate(n);
//释放T*指针p开始的地址。这一段内存有n个类型为T的对象
alloc.deallocate(p,n);
//在p指针指向的内存构造一个对象,args是构造函数的参数列表
alloc.construct(p,args);
//析构p指针指向内存的对象,注意在调用deallocate()之前需要调用destory()逐一析构
alloc.destory(p);

标签:alloc,string,对象,内存,new,allocator
来源: https://www.cnblogs.com/Paranoid5/p/16599992.html