allocator类
- new和delete的局限性
new在使用时将分配内存与初始化结合在了一起,而delete将析构与释放内存结合在了一起。对于单个对象的分配与析构,这毫无问题。但对于大量的元素,也许我们并不知道需要多少个对象,仅仅只是先分配一块内存,真正需要时再进行构造。 allocator说明
allocator定义在memory头文件中,这是一个模板类,初始化时必须指定欲分配对象的类型。allocator<T> a
定义allocator对象a.allocate(n)
分配一段原始的,未构造的内存,大小为n个T类型大小,返回相应的指针。a.deallocate(p, n)
释放p指向的内存,p由上一步得到,调用之前必须先对其中的T类型进行析构。a.construct(p, args)
构造p所指向的内存。a.destroy(p)
析构p所指的对象。拷贝和填充未初始化内存的算法
标准库还未allocator定义两个伴随算法,定义在memory头文件中。如下:uninitialized_copy(beg, end, p)
用beg和end范围内的值构造p所指向的原始内存。uninitialized_copy_n(beg, n, p)
用beg为起点,n个值构造p所指向的原始内存。uninitialized_fill(b, e, t)
在原始内存b到e范围内用t的拷贝构造。uninitialized_fill_n(b, n, t)
在原始内存b开始处向后构造n个,值为t的拷贝。