内存的智能管理—智能指针

2023-11-06

前言

我们在使用C和C++进行开发的时候,申请堆区内存是必不可少的,但是很多时候,我们经常忘记释放他导致内存泄漏,从而导致程序崩溃,又或者在尚未使用完成的时候释放,从而导致出现野指针,都是非常危险的现象,所以我们在C++11的标准中提出了智能指针的概念,他就是一种可以帮我们自动释放内存的存在

共享智能指针 - shared_ptr

他是使用最多的智能指针,它可以让多个指针指向同一片内存,同时在这片内存指向变为0的时候,他就会被释放
他有三种构造方式

//直接构造
shared_ptr<int>ptr(new int(10));
//使用make_shared
shared_ptr<int>ptr1=make_shared<int>(9);
//直接赋值
shared_ptr<int>ptr2=ptr1;

同样你还可以使用他的一些成员函数

get()//获取当前指针
swap()//交换管理对象
reset()//对指针进行重置操作,使原有指向修改为新的指向,该函数会
首先将原有内存减1,当减小为0会释放内存
use_conut()//智能指针指向内存引用计数

同样的,智能指针只能管理一片内存,要是管理数组需要手动释放

 //智能指针只能管理一块内存, 要是想管理数组, 需要手动释放   
  //智能指针管理数组, 需要自己指定lamb表达式自己释放   
 shared_ptr<A> ptr4(new A[5], [](A *p) {
         //释放内存        
         delete[]p;    
         });
 

唯一智能指针 - unique_ptr

只允许一个智能指针指向这块内存

//直接构造
unique_ptr<int>ptr(new int(10));
//使用make_shared,在linux环境下无法使用
unique_ptr<int>ptr1=make_shared<int>(9);

弱指针 -weak_ptr

这个使用的很少,主要是为了解决循环引用导致的内存泄露,引入了弱指针,他不会计入共享指针的数值,所以他不会对内存进行管理,主要是用来检测是否被释放

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内存的智能管理—智能指针 的相关文章

  • 如何在自定义保存操作 WFFM 中获取 Sitecore.Current.Site 对象?

    我在用着面向营销人员的 Sitecore 网络表单 在里面save action我得到的表格Sitecore Context Site对象 但该对象没有返回正确的上下文 该值为 modules shell 有谁知道我如何才能获得正确的上下文
  • 你好世界,裸机 Beagleboard

    我正在尝试在我的 Beagleboard xm rev 上运行 hello world 类型的程序 C 通过调用 Cputs功能来自装配 到目前为止 我一直使用这个作为参考 http wiki osdev org ARM Beagleboa
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • 在 std::forward 中它如何接受右值?

    看看斯科特 迈耶的有效的现代 C 第200 201页 建议的简化实施std forward可能是 在其他地方看到了正确的实现 template
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • C# 中 value 为匿名类型的字典

    是否可以在 C 中创建一个System Collections Generic Dictionary
  • flowlayoutpanel和水平滚动条问题

    我正在使用一个 flowlayoutpanel 它有很多逻辑上的按钮 我遇到的问题是 当我调整窗口大小时 当窗口变小时 我无法看到所有水平排列的按钮 相反 当窗口变小时 按钮会下降到下一行 谁能帮我解决这个问题 我只是希望按钮水平排列 当窗
  • 驱蚊程序?

    不 我认真的 最近 我读到 当电脑的压电蜂鸣器以一定频率振动时 声音可以驱赶蚊子 真的吗 如何以编程方式访问 PC 蜂鸣器 而不是扬声器 最好使用 C 我不知道有没有蚊子 但我的头疼得要命 啊啊 using System Runtime I
  • 在 C# 中给定周数和年份,计算一周的开始和结束日期(基于 ISO 规范)

    我需要生成一份报告 显示一年中的 52 周 或某些年份的 53 周 及其开始日期和结束日期 有一个 ISO 规范可以做到这一点 但看起来非常复杂 我希望有人知道在 C 或 Visual Basic 中执行此操作的方法 实际上适用于 Visu
  • 给出对象的指针作为参数

    假设我有 void func foo obj 我有 foo object 我该如何制作object进入争论func 只需取消引用它即可 func object
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • ASP.NET Core中间件如何进行DI?

    我正在尝试将依赖项注入到我的中间件构造函数中 如下所示 public class CreateCompanyMiddleware private readonly RequestDelegate next private readonly
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 使用 c++20 范围删除最后一个元素的最佳方法是什么

    有没有比反转两次更好的方法来使用 c 20 范围删除容器中的最后一个元素 include
  • 从资源文件获取 DisplayName [重复]

    这个问题在这里已经有答案了 我在 App GlobalResources 文件夹中有特定于文化的资源文件 现在我需要从此资源文件中读取 DisplayName 属性的值 我在用 Display Name MerchantName Resou
  • 如何设置扬声器声音增强设置

    如何以编程方式设置 Windows 扬声器设置 增强 选项卡 中可用的声音效果 恐怕这是不可能的 参见 Maurits 对他的评论blog http blogs msdn com b matthew van eerde archive 20
  • 所有区域的启用保护模式必须设置为相同的值(启用或禁用)

    我正在尝试使用Selenium Internet Explorer驱动程序 但当我尝试实例化它时它崩溃了 TestInitialize public void TestInitialise ieDriver new InternetExpl
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效

随机推荐

  • 取模!了解一下!

    嘤嘤嘤 快速幂取模都不会了 自闭了 取模运算 Modulo Operation 和取余运算 Complementation 两个概念有重叠的部分但又不完全一致 主要的区别在于对负整数进行除法运算时操作不同 取模主要是用于计算机术语中 取余则
  • 面向对象-继承

    继承 概念 继承父类的属性和行为 使得子类对象可以直接具有与父类相同的属性 相同的行为 子类可以直接访问父类中的非私有的属性和行为 继承是多态的前提 如果没有继承 就没有多态 特点 java只能单继承 但可以多层继承 a继承b b继承c 那
  • kafkatemplate无法注入_Spring Boot和Kafka实战自定义复杂配置示例

    这篇博客文章展示了如何配置Spring Kafka和Spring Boot以使用JSON发送消息并以多种格式接收它们 JSON 纯字符串或字节数组 基于此配置 您还可以将Kafka生成器从发送JSON切换到其他序列化方法 此示例应用程序还演
  • RabbitMQ--基础--10.4--优先级队列

    RabbitMQ 基础 10 4 优先级队列 1 优先级队列 指的是 具有高优先级的队列 优先级高的消息具备优先被消费的特权 可以通过 设置 x max priority 来设置 优先级队列 如果在消费者的消费速度远大于生产者的速度 且 B
  • 机票预订系统uml类图_产品经理必学UML(二):用例图

    上一篇中介绍了UML中的类图 本篇笔者将与大家介绍UML中的用例图的三个方面内容 用例 Use Case 参与者 Actor 参与者 用例之间的关系 用例图 Use Case Diagrame 描述了人们希望如何使用一个系统 将相关用户 用
  • java listnode 合并链表_java实现两个有序单链表合并

    本次分享的事两个有序单链表的合并 遍历方法递归 非递归 节点类 auther lawt date 2018 11 4 08 Description 结点信息 public class Node 为了方便 这两个变量都使用public 而不用
  • ESP8266如何使用u8g2(I2C)驱动SH1106的OLED

    u8g2是一款单色图形库 非常适合12864之类的显示屏 基本上支持了市面上的主流显示控制器 可是偏偏对SH1106不是那么友好 使用起来不是很方便 打开IDE的示例程序可以看到对SH1106列出来的几乎都SPI通信方式 仅仅只有一条是使用
  • Collection集合类和Map接口各实现类详解

    Java的集合类 collection接口和Map 一 集合概述 集合 集合是java中提供的一种容器 可以用来存储多个数据 集合和数组既然都是容器 它们有啥区别呢 数组的长度是固定的 集合的长度是可变的 数组中存储的是同一类型的元素 可以
  • RHEL 6.1 KVM虚拟机桥接物理机网络

    RHEL6 1 KVM虚拟机桥接物理机网络 一 KVM默认网络配置 1 kvm上网有两种配置 a NAT 支持主机与虚拟机的互访 也支持虚拟机访问互联网 但不支持外界访问虚拟机 b bridge 桥接 可以使用虚拟机成为网络中具有独立IP的
  • python进程简单操作

    1 用进程实现类似定时器的功能 import multiprocessing import time def clock interval while True print The time is 0 format time ctime t
  • java创建线程的四种方式

    1 继承Thread类创建线程 如图所示 继承Thread类 class Aclass extends Thread 输出100以内的偶数 Override public void run for int i 1 i lt 100 i Sy
  • DINO学习笔记

    DINO学习笔记 DINO DETR with Improved DeNoising Anchor Boxes for End to End Object Detection Abstract 我们提出了DINO DETR with Imp
  • ctfshow web11详解,小白补充session和PHPSESSID相关知识

    删除cookie中存储的PHPSESSID 删除PHPSESSID的值后 空密码即可登录了 这里有个误区 刚开始的我对session的知识点了解很少 我甚至觉得直接把PHPSESSID的值当作密码的值就满足 password SESSION
  • Qt入门-QLabel类

    QLabel是QT界面中的标签类 它从QFrame下继承 class Q GUI EXPORT QLabel public QFrame Q OBJECT 定义一个QLable类 QLabel label new QLabel this 设
  • PTA 乙级——1029 旧键盘 C++实现

    旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及实际被输入的文字 请你列出肯定坏掉的那些键 输入格式 输入在 2 行中分别给出应该输入的文字 以及实际被输入的文字 每段文字是不超过 80 个
  • OpenGL学习——(1)

    基础概念 刚接触OpenGL 感觉概念比较抽象 函数库也非常强大 学习起来比较吃力 本文为自己的学习笔记 主要将厚厚的课本知识进行整理 方便今后复习 同时也可以帮助其他初学者查看知识点 减少他们在学习过程中花费的时间 1 光栅化 实际绘制或
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (五) UI

    文章目录 教程说明 制作 World Space 模式的 UI 添加 Tracked Device Graphic Raycaster 脚本 添加 XR UI Input Module 脚本 添加 UI 射线相关脚本 负责 UI 射线的物体
  • 实现radio单选框单击取消选中状态

    需求 项目中对于有些单选内容可以设置默认选中 也可以不设置默认选中 而一般使用radio后 选中其中一个后 就无法让全部的radio恢复到一开始的未选中状态 如下图 后面的单选框只能三选一 并且也可以全部不选 同时如果选中了其中一个后 也可
  • 边缘计算:发展与挑战

    作者 高聪1 2 3 1 西安邮电大学计算机学院 2 西安邮电大学陕西省网络数据分析与智能处理重点实验室 3 西安邮电大学西安市大数据与智能计算重点实验室 本文对边缘计算进行了系统性的介绍 来源 边缘计算社区 边缘计算社区经过作者授权发布本
  • 内存的智能管理—智能指针

    前言 我们在使用C和C 进行开发的时候 申请堆区内存是必不可少的 但是很多时候 我们经常忘记释放他导致内存泄漏 从而导致程序崩溃 又或者在尚未使用完成的时候释放 从而导致出现野指针 都是非常危险的现象 所以我们在C 11的标准中提出了智能指