码迷,mamicode.com
首页 > 编程语言 > 详细

【C++ Primer 第十二章】 unique_ptr

时间:2018-04-25 20:56:52      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:赋值   ble   res   一个用户   bsp   转移   src   one   col   

unique_ptr

一个unique_ptr拥有它所管理的对象,与shared_ptr不同,unique_ptr指向的对象只能有一个用户。当unique_ptr被销毁后,它所指向的对象也被销毁。

• 与shared_ptr不同,没有类似make_shared_ptr的标准函数返回一个unqiue_ptr,定义一个unique_ptr时,需要将其绑定到一个new返回的指针上,类似shared_ptr,初始化unique_ptr必须采用直接初始化形式:

unique_ptr<double> p1;              // p1指向一个double类型变量  
unique_ptr<int> p2(new int(1024));  // p2指向一个int类型,值为1024  • 

• 因为只有一个unique_ptr拥有它所指向的对象,因此unique_ptr不支持普通的拷贝或赋值操作。

unqiue_ptr操作

技术分享图片

 

虽然我们不能拷贝或赋值unqiue_ptr,但可以通过调用release将指针的所有权从一个unqiue_ptr转移给另一个unqiue_ptr:

// 将所有权从p1(指向string Stegosaurus)转移给p2
unqiue_ptr<string> p2(p1.release())      //release将p1置为空
nqiue_ptr<string> p3(new string("Trex"));
p2.reset(p3.release())    // reset释放了p2原来指向的内存
                          // reset释放了原来指向的内存

 

传递给unique_ptr参数和返回unique_ptr

• 虽然不能拷贝一个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;    
}  

注意:对于两段代码,编译器知道要返回的对象将要销毁。在此情况下,编译器执行一种特殊的拷贝。

【C++ Primer 第十二章】 unique_ptr

标签:赋值   ble   res   一个用户   bsp   转移   src   one   col   

原文地址:https://www.cnblogs.com/sunbines/p/8946884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!