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; }
注意:对于两段代码,编译器知道要返回的对象将要销毁。在此情况下,编译器执行一种特殊的拷贝。
原文地址:https://www.cnblogs.com/sunbines/p/8946884.html
时间: 2024-11-06 07:46:28