Real-Ying

allocator

标准库allocator类及其算法:

操作解释
allocator<T> a 定义了一个名为aallocator对象,它可以为类型为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分配的内存构造对象
p
必须是一个类型是T*的指针 指向一块原始内存;args是多个额外的参数用来匹配类型T的对应构造函数,在p指向的内存中构造一个对象。
a.destroy(p) pT*类型的指针,此算法对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) 从迭代器be给定的输入范围中拷贝元素到迭代器b2指定的未构造的原始内存中。b2指向的内存必须足够大,能够容纳输入序列中元素的拷贝。
uninitialized_copy_n(b, n, b2) 从迭代器b指向的元素开始,拷贝n个元素到b2开始的内存中。
uninitialized_fill(b, e, t) 在迭代器be执行的原始内存范围中创建对象,对象的值均为t的拷贝。
uninitialized_fill_n(b, n, t) 从迭代器b指向的内存地址开始创建n个对象。b必须指向足够大的未构造的原始内存,能够容纳给定数量的对象。
  • 返回最后一个构造元素之后的位置

posted on 2020-05-06 02:48  Real-Ying  阅读(222)  评论(0编辑  收藏  举报

导航