C++11新特性(42)- 智能指针unique_ptr

软件开发中有很多处理是对称的,例如打开文件和关闭文件,申请内存和释放内存,压栈和出栈等。同样的道理分享也存在对称处理:独占。与之相应的智能指针就是unique_prt。它同样可以自动管理内存,只是这块内存不和其他的unique_ptr分享。

初始化

如果观察unique_ptr的构造函数声明会发现,unique_ptr支持的构造函数和shared_ptr相差无几,这里直接举例。

初始化空unique_ptr


两种写法完全等效。

从指针创建


这是最普通的初始化方式。

从右值引用创建


以下是执行结果,可以看到内存从p3转移到了p4。

赋值

由于unique_ptr对于内存的独占特性,unique_ptr不支持直接的赋值操作,而只能支持右值引用的赋值,基本形式如下:


必须是先前的持有者明确放弃权利之后,才能赋值给新的持有者。实际的程序中,上面的代码并没有太大的意义,真正常见的应该是下面的代码:


getvalue函数返回的是一个右值,所以也会执行右值引用赋值。

最后说一句话

从函数从返回unique_ptr的时候涉及到一个例外:即将销毁的unique_ptr可以被拷贝或赋值。


觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】



猜你喜欢

转载自blog.csdn.net/craftsman1970/article/details/80820105
今日推荐