C++基础回顾4——动态数组

C++语言库提供两种一次分配一个对象数组的方法:
1.new表达式语法——分配内存和初始化一起
2.allocator类,分配和初始化分离。

    int *pia = new int[42];
    typedef int arrT[42];
    int *p = new arrT;

    //初始化动态分配对象的数组
    int *pia = new int[10];
    int *pia = new int[10]();
    int *pia = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

new分配一个int数组,并返回指向第一个int的指针。虽然。通常new T[]分配的内存为“ 动态数组”,但当new分配一个数组时,返回的并不是一个数组类型的对象,而是一个指向数组元素类型的指针,即分配一个数组会得到一个元素类型的指针。

释放动态数组,例子如下,delete数组是需要加[],delete单一对象时不需要[],unique_ptr对于动态数组的释放使用delete。

    delete p; //p必须指向一个动态分配的对象或为空
    delete [] pia; //pia必须指向一个动态分配的数组或为空
    unique_ptr<int []> up(new int[10]);
    up.release(); //自动用delete[]销毁其指针

与unique_ptr不同,shared_ptr不直接支持管理动态数组,如果希望shared_ptr管理一个动态数组,必须提供自己定义的删除器。

//为了使用shared_ptr,必须提供一个删除器
    shared_ptr<int> sp(new int[10], [] (int *p){delete[] p;} );
    sp.reset();

allocator类
为了定义一个allocator对象,必须指明这个allocator可以分配的对象类型,当一个allocator对象分配内存时,它会根据给定的对象类型来确定恰当的内存大小和对齐位置:

    allocator<string> alloc;    //分配string类型的allocator对象
    auto const p = alloc.allocate(10);    //分配n个未初始化的string
    auto q = p;
    alloc.construct(q++);  //*q为空指针
    alloc.construct(q++, 10, 'c');  //*q为ccccccccc
    alloc.construct(q++, "hi");   //*q为hi

    while(q != p)
    {
        alloc.destroy(--q);
    }

标准库allocator类及其算法

  • allocator〈T〉 a:
  • a.allocate(n)
  • a.deallocate(p, n)
  • a.construct(p, args)
  • a.destory(p)
  • unintialized_copy(b, e, b2)
  • unintialized_copy_n(b, n,b2)
  • unintialized_fill(b, e, t)
  • unintialized_fill_n(b, n, t)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值