allocator类

allocator是一个模板类,它与new的区别在于:它分配的内存是原始的、未构造的。
例如:

allocator<string> alloc;//创建allocator对象
auto const p = alloc.allocate(n); // 为n个string分配内存
auto q = p;
alloc.construct(q++);// 初始化p(第一个string)为空字符串
alloc.construct(q++,10,'c');
alloc.construct(q++,"hello");
cout << *p << endl; // 正确: 指向第一个string字符串(空字符串)
cout << *q << endl; // 错误: 指向第四个string空间,未初始化

我们只能对真正构造了的元素进行destroy操作,经过destroy的内存可以重新初始化保存其他内容,
也可以将其释放(即释放前先要destroy已构造的元素),释放内存通过deallocate

alloc.deallocate(p,n);

此外,标准库还为allocator类定义两个伴随算法,用于在未初始化内存中创建对象:
uninitialized_copy(b,e,b2);//迭代器b、e指定输入范围,b2指定未构造原始内存
uninitailized_copy_n(b,n,b2);
uninitailized_fill(b,e,t);
uninitialized_fill_n(b,n,t);
例如:

vector<int> vi(10,2);
auto p = alloc.allocate(vi.size()*2);
uninitialized_fill_n(q,vi.size(),vi.end(),p);
uninitialized_fill_n(q,vi.size(),42);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值