标准库allocator类及其算法:
操作 | 解释 |
---|---|
allocator<T> a |
定义了一个名为a 的allocator 对象,它可以为类型为T 的对象分配内存 |
a.allocate(n) |
分配一段原始的、未构造的内存,保存n 个类型为T 的对象。 |
a.deallocate(p,n) |
释放从T* 指针p 中地址开始的内存,这块内存保存了n 个类型为T 的对象;p 必须是一个先前由allocate 返回的指针。且n 必须是p 创建时所要求的大小。在调用deallocate 之前,用户必须对每个在这块内存中创建的对象调用destroy 。 |
a.construct(p,args) |
使用allocator分配的内存构造对象 必须是一个类型是T* 的指针 指向一块原始内存;args是多个额外的参数用来匹配 类型T 的对应构造函数,在p 指向的内存中构造一个对象。 |
a.destroy(p) |
p 为T* 类型的指针,此算法对p 指向的对象执行析构函数。 |
- 为了使用allocator返回的内存必须使用construct构造对象,使用destroy析构了对象后可以重新使用这部分内存保存其他T类型元素,也可以使用deallocate释放对应内存将其归还给系统。
- allocator<string> alloc;
- auto p = alloc.allocate(10);
- alloc.construct(p, 8 "c"); //*p为cccccccc
- auto q = p++;
- alloc.destroy(p); alloc.deallocate(p);
allocator伴随算法:
标准库为allocator类定义的两个伴随算法,可以在为初始化的内存中创建对象。#include <memory>
操作 | 解释 |
---|---|
uninitialized_copy(b, e, b2) |
从迭代器b 和e 给定的输入范围中拷贝元素到迭代器b2 指定的未构造的原始内存中。b2 指向的内存必须足够大,能够容纳输入序列中元素的拷贝。 |
uninitialized_copy_n(b, n, b2) |
从迭代器b 指向的元素开始,拷贝n 个元素到b2 开始的内存中。 |
uninitialized_fill(b, e, t) |
在迭代器b 和e 执行的原始内存范围中创建对象,对象的值均为t 的拷贝。 |
uninitialized_fill_n(b, n, t) |
从迭代器b 指向的内存地址开始创建n 个对象。b 必须指向足够大的未构造的原始内存,能够容纳给定数量的对象。 |
- 返回最后一个构造元素之后的位置