当前位置: 首页 > news >正文

C++的智能指针

很久之前,我们说到了new和delete关键字。

new在堆上分配内存,需要delete来删除内存、释放内存,因为它不会自动释放内存。

智能指针是实现过程自动化的一种方式,即当我们调用new时,我们不需要调用delete关键字。

在很多情况下我们甚至不需要调用new。

智能指针实际上是一个原始指针的包装,当我们创建一个智能指针,它会调用new并为我们分配内存,然后基于我们使用的智能指针,这些内存会在某一时刻自动释放。

我们首先来了解一下unique_ptr

unique_ptr是作用域指针,是超出作用域时他会被销毁,然后调用delete

我们不可以复制一个unique_ptr,因为如果复制一个unique_ptr,那么我们就有两个指针指向了同一块内存地址。如果其中一个die了,那么它就会释放这段内存,也就是说,指向同一块内存的第二个unique_ptr指向了被释放的内存,所以我们不可以复制unique_ptr。

注意:要访问智能指针,我们需要memory头文件

#include<iostream>
#include<string>
#include<memory>class Entity
{
public:Entity()  //构造函数{std::cout<<"Create Entity!"<<std::endl;}~Entity()  //析构函数{std::cout<<"Destory Entity!"<<std::endl;}void Print(){}
};int main()
{{// std::unique_ptr<Entity> entity(new Entity()); //entity=new Entity是不可以的,因为unique_ptr需要显式地调用//尖括号的Entity是unique_ptr的模版,entity是unique_ptr的名字std::unique_ptr<Entity> entity = std::make_unique<Entity>();//推荐,因为如果构造函数抛出异常,这种方式会稍微安全一些,因为我们不会得到一个没有引用的悬空指针从而造成内存泄露entity->Print();//我们可以调用想要的任何方法 }std::cin.get();
}

共享指针shared_ptr的工作方式是通过引用计数,引用计数基本上是一种方法,可以跟踪我们的指针有多少个引用,一旦引用计数达到0,它就被删除了

shared_ptr需要分配一块内存,叫做控制块,用来存储引用计数

弱指针weak_ptr

http://www.lryc.cn/news/446807.html

相关文章:

  • 微信小程序showLoading ,showToast ,hideLoading连续调用出现showLoading 不关闭的情况记录
  • OpenFeign使用详解
  • CSS clip-path 属性的使用
  • PHP 函数
  • NCEloss与InfoNCEloss的区别
  • 高通Android 12 push framework.jar和service.jar
  • HTTPS证书配置
  • Image matting入门
  • 基于安全风险预测的自动驾驶自适应巡航控制优化
  • Docker Compose 搭建 Redis 哨兵集群模式搭建详解(1主2从+3哨兵)(包含主从复制的搭建) (保证一遍学会)
  • Oracle 单机和集群环境部署教程
  • springboot 整合酷狗获取MV视频最高画质(使用自己账户)
  • 数字孪生平台,助力制造设备迈入超感知与智控新时代!
  • 音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现
  • pycirclize python包画circos环形图
  • Redis Sorted Set 跳表的实现原理和分析
  • 新手教学系列——在MySQL分表中批量调整表结构的实践与优化
  • 解决事务提交延迟问题:Spring中的事务绑定事件监听机制解析
  • Python 异步编程的秘密武器:Asyncio
  • 10年计算机考研408-计算机网络
  • 深信服校招面试总结
  • 【LeetCode热题100】模拟
  • 如何在Chrome最新浏览器中调用ActiveX控件?
  • 一款好用的远程连接工具:MobaXterm
  • Spring Boot使用配置方式整合MyBatis
  • HarmonyOS第一课-应用程序框架基础习题答案
  • 滚雪球学SpringCloud[10.2讲]:微服务项目的性能优化与调优
  • EasyExcel将数据库里面的数据生成excel文件
  • 【YOLO学习】YOLOv1详解
  • HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)