ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

C++智能指针 shared_ptr与unique_ptr

C++智能指针 shared_ptr与unique_ptr

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 后,内存也会在指针不被指向后进行自动回收

返回列表