推荐B站文章:
独占指针:unique_ptr 与 函数调用-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135841140?spm=1001.2014.3001.5501计数指针:shared_ptr (共享指针)与函数-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135851596?spm=1001.2014.3001.5501
(1)shared_ptr 与 unique_ptr
- 不能将shared_ptr 转换为unique_ptr
- unique_ptr可以转换为shared_ptr
- 通过std::move
(2)常见的设计
- 将你的函数返回unique_ptr是一种常见的设计模式,这样可以提高代码的复用度,你可以随时改变为shared_ptr
- 因为返回unique_ptr类型的可以直接赋值给shared_ptr类型的
cpp
#include <iostream>
#include <memory>
#include "cat.h"
using namespace std;
std::unique_ptr<Cat> get_unique_ptr() {
std::unique_ptr<Cat> cat_p = std::make_unique<Cat>("lanmao");
return cat_p;
}
int main(int argc,char* argv[]) {
std::unique_ptr<Cat> c_p_1 = std::make_unique<Cat>("TomCat");
std::shared_ptr<Cat> c_p_2 = std::move(c_p_1);// 将unique_ptr转换成shared_ptr
cout<<"c_p_2 use count : " << c_p_2.use_count() << endl;// 1
// func
std::shared_ptr<Cat> c_p_3 = get_unique_ptr();
if(c_p_3) {
c_p_3->catInfo();
cout<<"c_p_3 use count : " << c_p_3.use_count() << endl; // 输出1
}
cout<<"over~"<<endl;
return 0;
}
执行结果:
cpp
PS D:\Work\C++UserLesson\cppenv\bin\Debug> ."D:/Work/C++UserLesson/cppenv/bin/Debug/app.exe"
Constructor of Cat : TomCat
c_p_2 use count : 1
Constructor of Cat : lanmao
cat info name : lanmao
c_p_3 use count : 1
over~
Destructor of Cat
Destructor of Cat
PS D:\Work\C++UserLesson\cppenv\bin\Debug>