1、什么是std::allocator。
std::allocator是C++中将内存分配与构造初始化分离开的类。在类中封装了方法,使得操作内存变得更容易。头文件是<memory>
2、allocator中封装的方法:
allocator<T> t | 实例化一个分配T类型的allocator对象 |
t.allocator(n) | 分配一段原始的、未构造的内存,保存n个类型的对象。 |
t.deallocator(p,n) | 释放类型T*的p中开始的内存,这块内存保存了n个T*类型的对象,其n必须与先前调用allocator时的n相同,其p的类型也必须是allocator返回的指针,在调用deallocator之前必须调用每个在这块内存块创建的对象的析构函数。 |
t.construct(p,args) | p必须是T*类型的指针,args被传递给类型T*的构造函数,意在给p指向的内存构造对象。 |
t.destroy(p) | p必须是T*类型的指针,给p指向的内存块进行析构。 |
3、allocator的伴随算法:
uninitialized_copy(iteratorFirst,iteratorLast,alloc); | 从迭代器指定的范围中拷贝元素到alloc指定的为构造的原始内存中并且内存要足够大。 |
uninitialized_copy_n(iteratorFirst,n,alloc); | 从迭代器中拷贝n个元素到alloc指定的内存中。 |
uninitialized_fill(allocFirst, allocLast, value); | 在迭代器的范围内创建对象,对象为value。 |
uninitialized_fill_n(allocFirst, n, value); | 在迭代器中创建n个值为value的对象。 |
4、allocator与new的区别
(1)allocator:分配内存。
(2)new:分配内存,初始化内存。
总结:allocator比new速度快。