shared_ptr 与 unique_ptr 的转换 笔记

news2024/11/18 3:32:27

推荐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 <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;
}

执行结果:

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1410767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长度计算方法----sizeof与strlen的对比

sizeof sizeof是用来计算内存大小的一种操作符&#xff0c;它只计算内存的大小&#xff0c;无论内存中存放的是什么类型的数据。 单位&#xff1a;字节 举例&#xff1a; #inculde <stdio.h> int main() {int a 10;printf("%d\n", sizeof(a));//a的括号可…

API、DOM、获取元素、事件、文本节点、属性操作

单线程 进程 cpu 资源分配的最小单位一个进程可以有多个线程 线程 cpu调度的最小单位线程建立在进程的建立基础上的一次程序的运行单位 线程分为&#xff1a;单线程 多线程 单线程&#xff1a;js是单线程 &#xff08;同一个时间只能完成一个任务&#xff09;多线程&…

SRPC 框架服务端源码解析

0. RPC Context 保存某些必要的上下文信息&#xff1b; 某端独有功能&#xff1a;Client 获取请求成功或失败 1. RPCBuffer const 和 constexpr 变量的主要区别是&#xff1a;const 变量的初始化可以被推迟到运行期&#xff0c;constexpr 必须在编译期初始化&#xff1b;所…

剪映声音克隆;多位滴滴前中高层加入小红书提速商业化;中国和新加坡互免签证

今日精选 • 剪映推出 AI 音色克隆功能&#xff0c;录制 5 秒声音即可完成克隆• 商业化全面提速&#xff0c;多位滴滴前中高层加入小红书• 2 月 9 日起&#xff0c;中国和新加坡互免签证 科技动态 • 夸克上线大模型新产品“AI PPT”&#xff0c;可一键生成提纲、创作 PPT…

消息中间件之RocketMQ(三)

常见问题 1.重复消费 产生的原因是发送消息时采用了多数分布式消息中间件产品提供的最少一次(at least once)的投递保障&#xff0c;对于这个问题最常见的解决方案,就是消息消费端实现业务幂等&#xff0c;只要保持幂等性&#xff0c;不管来多少条重复消息&#xff0c;最后处…

码多多ChatAI智能聊天系统-一款好用的代码编程助手

码多多ChatAI智能聊天系统可以作为一款智能编程助手&#xff0c;帮助程序员提高编程效率&#xff0c;降低开发成本。 产品介绍 码多多ChatAI智能聊天系统是一款基于人工智能技术的编程辅助工具&#xff0c;它通过深度学习算法和大数据分析&#xff0c;为程序员提供智能代码提…

权威的健康养生与医学基础知识科普学习信息汇总

目录 1 关于健康与食物营养的权威网址1.1 世界卫生组织&#xff08;World Health Organization: WHO&#xff09;1.2 美国国家卫生研究院 (National Institutes of Health: NIH)1.3 澳大利亚政府健康门户 (Healthdirect)1.4 国际食品信息委员会 (International Food Informatio…

如何使用宝塔面板配置Nginx反向代理WebSocket(wss)

本章教程&#xff0c;主要介绍一下在宝塔面板中如何配置websocket wss的具体过程。 目录 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 2、代理配置内容 三、注意事项 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 map $http_upgrade $connection_…

【GitHub项目推荐--不错的 Electron开源项目】【转载】

eDEX-UI&#xff1a;超炫酷终端工具 eDEX-UI 是一款跨平台基于 Electron 的炫酷终端工具。好莱坞级别的终端使用体验&#xff0c;拥有漂亮的启动动画、浮夸的音效&#xff0c;还能够直观地展示文件目录、系统资源、网络等信息。支持实时系统和网络监控、触摸式显示器&#xff…

AI Toolkit软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; AI Toolkit是一款卓越的人工智能软件&#xff0c;专为企业和个人提供一体化的解决方案&#xff0c;助力其工作流程高效运转。该软件套件融合了多种顶…

【公务员】图形推理技巧

位置规律 图形特征&#xff1a; 图形组成相同&#xff0c;优先考虑位置规律。 详细技巧&#xff1a; 样式规律 图形特征&#xff1a; 图形组成相似&#xff0c;优先考虑样式规律。 详细技巧&#xff1a; 形式技巧加法1、直接叠加2、☆规则运算&#xff1a;外轮廓与分割区域…

OpenCV笔记之图像处理中遮罩和掩模的关系

OpenCV笔记之图像处理中遮罩和掩模的关系 code review 文章目录 OpenCV笔记之图像处理中遮罩和掩模的关系1.遮罩详解遮罩的创建遮罩的应用遮罩的主要应用遮罩的类型如何创建遮罩遮罩在图像处理中的应用方式 2.遮罩和掩模的关系 1.遮罩详解 在图像处理中&#xff0c;遮罩&#…

Linux/Doctor

Enumeration nmap 已知目标开放了22,80,8089端口&#xff0c;扫描详细情况如下 可以看到对外开放了22,80,8089三个端口 TCP/80 SSTI 访问80端口&#xff0c;有一个infodoctors.htb的电子邮件&#xff0c;点击其他的也没有什么反应&#xff0c;猜测有可能需要域名访问 在/et…

进程(三)进程间的切换、环境变量

文章目录 进程间的切换Linux2.6内核进程调度队列一个CPU拥有一个runqueue优先级活跃进程过期队列active指针和expired指针 环境变量基本概念常见环境变量查看环境变量的方法测试PATH测试HOME和环境变量相关的命令通过代码如何获取环境变量通过系统调用获取环境变量 进程间的切换…

错误票据-蓝桥杯

思路&#xff1a; 其实只是排序一下&#xff0c;然后遍历&#xff0c;如果两个值差2&#xff0c;则输出两个值的平均数&#xff0c;如果两个数差值为0 &#xff0c;那么则这个值就是重复的值 代码&#xff1a; #include <iostream> #include<vector> #include&l…

第二篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:添加组件和事件处理

传奇开心果短博文系列 系列短博文目录鸿蒙开发技术点案例示例短博文系列 短博文目录一、前言二、添加组件和事件处理示例代码三、补全其余组件事件处理示例代码 系列短博文目录 鸿蒙开发技术点案例示例短博文系列 短博文目录 一、前言 有一必然会有二&#xff0c;有了第一个…

Java项目:基于SSM框架实现同城蔬菜配送管理系统(SSM+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm825基于SSM框架实现同城蔬菜配送管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

小程序系列--12使用 npm 包

一、Vant Weapp 1. 什么是 Vant WeappVant Weapp 是有赞前端团队开源的一套小程序 UI 组件库&#xff0c;助力开发者快速搭建小程序应用。它所使用的是 MIT 开源许可协议&#xff0c;对商业使用比较友好。 官方文档地址 https://youzan.github.io/vant-weapp 2. 安装 Vant 组…

《WebKit 技术内幕》学习之六(1): CSS解释器和样式布局

《WebKit 技术内幕》之六&#xff08;1&#xff09;&#xff1a;CSS解释器和样式布局 CSS解释器和规则匹配处于DOM树建立之后&#xff0c;RenderObject树之前&#xff0c;CSS解释器解释后的结果会保存起来&#xff0c;然后RenderObject树基于该结果来进行规范匹配和布局计算。当…

Unity 组合模式(实例详解)

文章目录 示例1&#xff1a;Unity中的图形界面元素组合示例2&#xff1a;Unity中的游戏对象层级组合示例3&#xff1a;Unity中的场景图节点组合示例4&#xff1a;Unity中的场景管理组合示例5&#xff1a;Unity中的角色技能树组合 在Unity中&#xff0c;组合模式&#xff08;Com…