shared_ptr与unique_ptr的转换关系
· 不能将shared_ptr转换为unique_ptr
· unique_ptr可以转换为shared_ptr(通过std::move)
常见的使用方式
· 将你的函数返回unique_ptr 是一种常见的设计模式,这样可以提高代码的复用度,因为unique_ptr可以赋值给shared_ptr,这样可以随时改变为shared_ptr
代码实践
#include<iostream>// 智能指针头文件#include<memory>// 自定义类头文件#include"CustomClass.h"usingnamespacestd;// 创建unique_ptr指针std::unique_ptr<CustomClass>get_unique_ptr(){std::unique_ptr<CustomClass>cp=std::make_unique<CustomClass>("unique to shared");returncp;}intmain(){// 创建unique_ptrstd::unique_ptr<CustomClass>cup1=std::make_unique<CustomClass>("unique ptr");// 将unique_ptr赋值给shared_ptrstd::shared_ptr<CustomClass>csp1=std::move(cup1);std::cout<<"csp1 use count: "<<csp1.use_count()<<endl;// func 返回值std::shared_ptr<CustomClass>csp2=get_unique_ptr();if(csp2){std::cout<<"csp2 is not null"<<endl;csp2->cat_info();std::cout<<"csp2 use count: "<<csp2.use_count()<<endl;}else{std::cout<<"csp2 is null"<<endl;}std::cout<<"----------- END --------------------\n";return0;}打印结果:
可以看到:
unique_ptr可以直接赋值给shared_ptr,且赋值给 shared_ptr 后,内存也会在指针不被指向后进行自动回收