shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章:

6.shared_ptr与unique_ptr_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV18B4y187uL?p=6&vd_source=a934d7fc6f47698a29dac90a922ba5a3我的往期文章:

独占指针:unique_ptr 与 函数调用-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/135841140?spm=1001.2014.3001.5501计数指针:shared_ptr (共享指针)与函数-CSDN博客icon-default.png?t=N7T8https://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 类型的
#include 
#include 
#include "cat.h"
using namespace std;

std::unique_ptr get_unique_ptr() { 
    std::unique_ptr cat_p = std::make_unique("lanmao");
    return cat_p;
}

int main(int argc,char* argv[]) {
    std::unique_ptr c_p_1 = std::make_unique("TomCat");
    std::shared_ptr 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 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~"<

执行结果:

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>

你可能感兴趣的:(智能指针,unique_ptr,shared_ptr,转换)