智能指针与动态数组

参考链接

一、unique_ptr<>

1、直接支持动态数组,支持下标访问,也可以用get获取内置指针来访问。

2、申明形式:unique_ptr<T[ ]> u(p)

unique_prt< int[ ] > up( new int[10] );

up.release();  //unique_ptr::release()是自己存储的指针,并不销毁管理的对象;返回指针值,并将自身置为空指针

3、下标访问方式:u[ i ]

for( size_t i = 0 ; i ! = 10 ; ++ i )
  up[ i ] = i;

二、shared_ptr<>

1、shared_ptr不直接支持管理动态内存:未定义下标运算符、不支持指针的算术运算。需要用户提供删除器。只能用get获取内置指针来访问。

2、声明形式:

shared_ptr<int> spArr(new int[10], [](int *p){delete []p;});

3、访问数据:get()获取内置指针

shared_ptr<int> spArr(new int[10], [](int *p){delete []p;});
spArr.get()[3] = 10;
cout << spArr.get()[3] << endl;
for(size_t i = 0; i ! = 10; ++i)
    *(sp.get() + i) = i;

 

posted @ 2020-09-08 18:09  kuaqi  阅读(487)  评论(0编辑  收藏  举报