【C++11】智能指针 | shared_ptr和unqieu_ptr所有权转换

  • Post author:
  • Post category:其他

https://www.coder.work/article/12866

unique_ptr -> shared_ptr (OK)

标题的意思:如何将unique_ptr的所有权,转移给shared_ptr

可以轻松的将unique_ptr指针通过移动构造函数,转换为shared_ptr,对对象进行管理,反之不行。

原因:因为unique_ptr独享所有权,只拥有移动构造函数/移动赋值运算符,转移所有权给shared_ptr的时候,是安全的。

方法:

std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);

也可以这样:
···
std::shared_ptrstd::string shared = std::make_uniquestd::string(“test”);
···

shared_ptr -> unique_ptr (NOT OK)

无法将shared_ptr转换为unique_ptr

多出来的引用计数无处安放,就好像父类无法赋值给子类一样,父类对象赋值给子类对象时,由于父类对象不能够提供子类对象所特有的变量,因此会报错.


版权声明:本文为Zhenzhong_Xu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。