《C++避坑神器·二十》C++智能指针简单使用

news2024/11/26 22:23:13

智能指针,自动释放所指向的对象。

头文件

#include <memory>

shared_ptr 允许多个指针指向同一个对象
unique_ptr 独占所指向的对象
weak_ptr 指向shared_ptr所管理的对象

作用原理:在函数作用域结束时调用析构函数自动释放资源。

shared_ptr: 共享指针,会通过计数器记录有多少个指针指向同一资源,可通过use_count()查看有多少个指针指向同一资源。
创建智能指针必须指定数据类型:shared_ptr p1;

动态创建对象:
在这里插入图片描述
注意:

stared_ptr<int> p = new int(10);  //错误写法

这是错的,接受指针参数的智能指针构造函数是 explicit 的,因此,我们不能将一个内置指针隐式的转换为一个智能指针,必须使用直接初始化形式。

shared_ptr<int> p2(new int(1024));  //正确写法

一些案例:
在这里插入图片描述
在这里插入图片描述

递增递减问题:
在这里插入图片描述

cout << r.use_count() << endl;   //3
p.get() //获取指针地址,如shared_ptr<int> p(new int(10));  p.get()获取的是指向new int(10)地址,也即获取这个指针,auto q = p.get(); 相当于auto q = new int(10);
p.reset() //p指针不在指向这个内存,资源数减1

unique_ptr指针:
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。
在这里插入图片描述

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

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

相关文章

数据结构-二叉树力扣题

目录 1.相同的树 2.二叉树中查找值为x的节点 3.单值二叉树 4.对称二叉树 5.二叉树的前序遍历 6.另一颗树的子树 层序遍历&#xff1a; 7.二叉树遍历 8.判断二叉树是否是完全二叉树 一个特殊的性质&#xff1a; 1.相同的树 题目链接&#xff1a;力扣&#xff08;LeetC…

基于操作系统讨论Java线程与进程、浅谈Go的线程与管程

文章目录 操作系统中的进程进程概念进程的状态 Java中的进程Java进程的概念Java进程的特性Java进程的状态Java进程与操作系统进程的通信 操作系统的进程和Java进程的区别联系操作系统进程Java 进程区别和联系 操作系统中的线程动机优点多核编程 Java中的线程定义&#xff1a;特…

ping命令使用示例解析

【一】ping命令简介 ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序。ping的一般用途有&#xff1a; ①【测试网络物理链路是否正常】&#xff1a;通过将ICMP(Internet控制消息协议)回显数据包发送到网络终端&…

Unity中Shader图形流水线中的纹理

文章目录 前言一、图形流水线中的纹理1、我们的纹理一般用于&#xff1a;2、纹理的获取方式&#xff1a; 二、纹理的分类1、颜色纹理2、几何纹理 三、纹理管线四、纹理的作用1、纹理可以 替换 漫反射模型中的 漫反射系数Kd2、纹理还有的作用 前言 Unity中Shader图形流水线中的…

【入门篇】1.3 redis客户端之 jedis 高级使用示例

文章目录 0.前言1. 发布和订阅消息2. 事务操作3. 管道操作4. jedis 支持哨兵模式5. jedis 支持集群模式5. 参考链接 0.前言 Jedis是Redis的Java客户端&#xff0c;它支持所有的Redis原生命令&#xff0c;使用方便&#xff0c;且可以与Java项目无缝集成。 该库的最新版本支持Re…

C#创建并调用dll

文章目录 1.VS2019创建C#主程序2.编译主程序3.添加类库工程&#xff0c;并添加计算逻辑4.给主程序添加引用项5.重新编译主程序6.主程序添加测试逻辑 1.VS2019创建C#主程序 2.编译主程序 debug目录下生成exe&#xff1a; 3.添加类库工程&#xff0c;并添加计算逻辑 添加计算逻…

ROS 多机器人导航RVIZ环境的配置

文章目录 前言一、添加多个2D Pose Estimate/2D nav Goal二、RVIZ的其他配置1.RobotModel 总结 前言 前文ROS Turtlebot3多机器人编队导航仿真写了多机器人呢导航的代码实现&#xff0c;本文主要说明&#xff0c;RVIZ导航环境的配置&#xff0c;如何添加多个2D Pose Estimate/…

CODING DevOps产品认证笔记

1.敏捷&精益&瀑布概述 1.1 敏捷软件开发 第一章敏捷软件开发背景 背景&#xff1a;乌卡时代 易变性:当今世界的变化越来越多越来越快&#xff0c;越来越不可预测。不确定性:历史上的任何一个时代所带来的经验已经无法为当今世界的所有变化提供参照。复杂性:事物间的…

Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)

export default { data() { return { iBeaconDevices: [], // 存储搜索到的iBeacon设备 deviceId: [], data: [], url: getApp().globalData.url, innerAudioContext: n…

【MATLAB源码-第79期】基于蚯蚓优化算法(EOA)的栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚯蚓优化算法&#xff08;Earthworm Optimisation Algorithm, EOA&#xff09;是一种启发式算法&#xff0c;灵感来源于蚯蚓在自然界中的行为模式。蚯蚓优化算法主要模仿了蚯蚓在寻找食物和逃避天敌时的行为策略。以下是蚯蚓…

Python Numpy.einsum

、 见 https://zhuanlan.zhihu.com/p/27739282

程序员如何悄悄拔尖,然后惊艳四座?

谁最初还不是个血气方刚、胸怀抱负的有志青年了&#xff1f; 渐渐的&#xff0c;被岁月磨平棱角&#xff0c;被生活冲淡理想&#xff0c;如今的你还有几分似从前&#xff1f; 你是否&#xff0c;不安现状、焦虑未来、忙忙碌碌没有方向&#xff1f; 不甘平庸?不想摸鱼&#…

论文技巧2

目录 1 找基准模型2 找模块小论文的三个实验怎么做对比试验Sota的挑选对⽐论⽂结果的获取3 消融实验什么是消融实验怎么做消融实验4 实例分析怎么做实例分析小论文必备三张图1 找基准模型 2 找模块 小论文的三个实验 怎么做对比试验

桂院校园导航 | 云上高校导航 云开发项目 二次开发教程 1.3

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Campus-Guide 演示视频 中国大学生计算机设计大赛-移动应用与开发-云上高校导航 升级日志 1.3 优化了小程序的数据存储方式&#xff0c;对部分页面进行了调整&#xff0c;调整了功能和代码。 引…

sscanf提取相应字符到数组

代码如下 #include<stdio.h> #include<string.h>int main(int argc, char const *argv[]) {char buf[128] {0};int m1 0, m2 0;int s1 0, s2 0;char lrc[128] "";sscanf("[02:16.33][04:11.44]我想大声宣布对你恋恋不舍","[%*1d%d…

【Pytorch笔记】7.torch.nn (Convolution Layers)

我们常用torch.nn来封装网络&#xff0c;torch.nn为我们封装好了很多神经网络中不同的层&#xff0c;如卷积层、池化层、归一化层等。我们会把这些层像是串成一个牛肉串一样串起来&#xff0c;形成网络。 先从最简单的&#xff0c;都有哪些层开始学起。 Convolution Layers -…

YOLO目标检测——谢韦尔钢材缺陷检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;钢材质量控制、钢材缺陷检测数据集说明&#xff1a;谢韦尔钢材缺陷检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(jso…

交换机如何配置BGP协议

环境&#xff1a; 华为交换机 华三交换机 问题描述&#xff1a; 交换机如何配置BGP协议 解决方案&#xff1a; 华三交换机上配置案例 1.配置BGP协议&#xff0c;可以按照以下步骤进行&#xff1a; 登录交换机&#xff1a;使用SSH、Telnet或控制台等方式登录到华三交换…

SpringBoot整合Redis使用基于注解的缓存

环境准备 注解 EnableCaching CacheConfig CacheConfig 提供了一种在类级别共享公共缓存相关设置的机制。 | 参数 | 作用 | | | — | — | — | | cacheNames | 使用在类上的默认缓存名称 | | | keyGenerator | 用于类的默认KeyGenerator的bean名称 | | | cacheManager | 自定…

Linux内核中的内存管理剖析,干货收藏!

内存管理的主要工作就是对物理内存进行组织&#xff0c;然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处&#xff1a; 用户进程可以直接操作内核对应的内存&#xff0c;破坏内核运行。 用户进程也…