c++智能指针(四)之unique_ptr

来源:互联网 发布:java中间件 pdf 编辑:程序博客网 时间:2024/05/22 00:22

unique_ptr

和shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。

初始化

没有类似make_shared的标准库函数返回一个unique_ptr,需要将其绑定到一个new返回的指针上。

    unique_ptr<int> u(new int(1024));

由于unique_ptr拥有它所指向的对象,所以他不支持普通的拷贝和赋值操作。

unique_ptr<int> u(new int(1024));unique_ptr<int> m(u);//错误,unique_ptr不支持拷贝unique_ptr<int> u1;u1 = u;//错误,unique_ptr不支持赋值

虽然我们不能拷贝或者赋值unique_ptr,但是可以通过调用release或者reset将指针的所有权从一个非const的unique_ptr转移给另一个unique;

unique_ptr<int> u(new int(1024));//将所有权从u转移给munique_ptr<int> m(u.release());//release将u置空unique_ptr<int> n(new int(2048));m.reset(n.release());//reset释放了m原来指向的内存,m指向n原来指向的内存

如果我们不用另一个智能指针来保存release返回的指针,我们的程序就负责资源的释放。

u.release();//错误,p2不会释放内存,而我们丢失了指针。auto p = u.release();//正确,但我们必须记得delete(p)

不能拷贝unique_ptr的规则有一个例外:我们可以拷贝或复制一个将要被销毁的unique_ptr。最常见的例子是从函数返回一个unique_ptr:

unique_ptr<int> clone(int p){    return unique_ptr<int>(new int(p));//正确}

还可以返回一个局部对象的拷贝:

unique_ptr<int> clone(int p){    unique_ptr<int> ret (new int(p));//正确    return ret;//正确}

向unique_ptr传递删除器

类似shared_ptr,unique_ptr默认情况下用delete释放它指向的对象。与shared_ptr一样,我们可以重载一个unique_ptr默认的删除器。

unique_ptr<objT,delT> p(new objT,fcn);//p指向一个类型为objT的对象,并使用一个类型为delT的对象释放objT对象。
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三点定位双眼皮价格 品牌战略定位 汽车品牌定位 室内定位解决方案 三点定位双眼皮恢复 三点定位双眼皮原理 四轮定位厂家 市场定位分析 定位双眼皮多少钱 汽车4轮定位多少钱 头发定位多少钱 工厂人员定位 汽车定位屏蔽器 户户通定位破解 养猪定位栏价格 特劳特定位课程 品牌文化定位 行车路线导航 老婆出轨怎么办 出行必备 定卫 跟踪软件 行车路线导航下载 10元改朋友圈定位be 为什么要做四轮定位 定值电阻 定值 整定值快速计算公式 大定通宝值多少钱 定值电阻的作用 负定矩阵特征值 定做 定做家具 定做衣柜 沙发套定做 定做室内门 蚕丝被定做 定做衣帽间 彩旗定做 门窗定做 t恤定做厂家