智能指针与动态数组
一、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;