数组的智能指针的限制:
1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[]
2,shared_ptr的数组智能指针,有*和->操作,但不支持下标操作[],只能通过get()去访问数组的元素。
3,shared_ptr的数组智能指针,必须要自定义deleter
一些例子:
错误示例:
auto siftData = std::make_shared<SiftData[4]>();下文没能初始化
改为:
shared_ptr<SiftData> siftData(new SiftData[4], [](SiftData* p) {delete[] p; });
ExtractSift(*siftData.get(), cudaImg, 5, initBlur, thresh, 0.0f, false, memoryTmp);
SaveAll(*siftData.get(), sFeat, sDesc);
其他的例子如:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class test{
public:
explicit test(int d = 0) : data(d){cout << "new" << data << endl;}
~test(){cout << "del" << data << endl;}
void fun(){cout << data << endl;}
public:
int data;
};
int main(){
//test* t = new test[2];
unique_ptr<test[]> up(new test[2]);
up[0].data = 1;
up[0].fun();
up[1].fun();
shared_ptr<test> sp(new test[2], [](test* p){delete [] p;});
(sp.get())->data = 2;//数组的第一个元素
sp->data = 10;
test& st = *sp;
st.data = 20;
(sp.get() + 1)->data = 3;//数组的第二个元素
return 0;
}