1.Unique_ptr指针
其意思就是唯一拥有资源之含义。传入的参数要是new出来的(这样才能被delete掉).实际上你可以这么写:
int *p = new int;
unique_ptr<int> p1(p);
unique_ptr<int> p2(p);
这样的话p1和p2都指向了同一个p资源,虽然编译不会报错,但是析构p1,p2的时候会造成对p双重delete的操作,崩溃程序。所以不要这么做,直接在定义只能指针的时候new,或者仅将一个指针给一个智能指针(人肉规定)。
unique_ptr没有无法复制构造函数,也不能赋值
unique_ptr<int> p1(new int(10)); //这里new int(10)是初始化,new int[10]是数组
unique_ptr<int> p2(p1); //会出错,不支持复制构造
unique_ptr<int> p2 = p1; //会出错,不支持赋值,仅可以用move
虽然不可以之际赋值,但是可以使用以下的:
unique_ptr<int> rep()
{
unique_ptr<int> a(new int(10));
return a;
}
unique_ptr<int> b = rep();