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的拷贝。