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

【C++学习篇】智能指针

目录

 1. 智能指针的使用场景分析

2. RAII和智能指针的设计思路

 3. C++标准库智能指针的使用

 4.shared_ptr和weak_ptr

4.1shared_ptr的循环引用问题

 4.2 weak_ptr


 1. 智能指针的使用场景分析

 下⾯程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后⾯的delete没有得到执⾏,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本⾝也可能抛异常,连续的两个new和下⾯的Divide都可能会抛异常,让我们处理起来很⿇烦。智能指针放到这样的场景⾥⾯就让问题简单多了。

 

2. RAII和智能指针的设计思路

 

 3. C++标准库智能指针的使用

1.  C++标准库中的智能指针都在<memory>这个头⽂件下⾯,我们包含<memory>就可以是使⽤了,智能指针有好⼏种,除了weak_ptr他们都符合RAII和像指针⼀样访问的⾏为,原理上⽽⾔主要是解决智能指针拷⻉时的思路不同。

2.  auto_ptr是C++98时设计出来的智能指针,他的特点是拷⻉时把被拷⻉对象的资源的管理权转移给拷⻉对象,这是⼀个⾮常糟糕的设计,因为他会到被拷⻉对象悬空,访问报错的问题,C++11设计出新的智能指针后,强烈建议不要使⽤auto_ptr。其他C++11出来之前很多公司也是明令禁⽌使⽤这个智能指针的。

3.  unique_ptr是C++11设计出来的智能指针,他的名字翻译出来是唯⼀指针,他的特点的不⽀持拷⻉,只⽀持移动。如果不需要拷⻉的场景就⾮常建议使⽤他。

4.  shared_ptr是C++11设计出来的智能指针,他的名字翻译出来是共享指针,他的特点是⽀持拷⻉,也⽀持移动。如果需要拷⻉的场景就需要使⽤他了。底层是⽤引⽤计数的⽅式实现的。

5.  weak_ptr是C++11设计出来的智能指针,他的名字翻译出来是弱指针,他完全不同于上⾯的智能指针,他不⽀持RAII,也就意味着不能⽤它直接管理资源,weak_ptr的产⽣本质是要解决shared_ptr的⼀个循环引⽤导致内存泄漏的问题。具体细节下⾯我们再细讲。

补充:

这里有一个问题,大家思考一下!

笔记:

 

 4.shared_ptr和weak_ptr

4.1shared_ptr的循环引用问题

 4.2 weak_ptr

相关文章:

  • 七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)
  • 从零开始学 Node.js:完整安装与实战指南
  • vulnhub靶场之【digitalworld.local系列】的JOY靶机
  • 深入解析英文单词“Dime”——从硬币到篮球助攻
  • 滑动窗口法——实践中的BA
  • win10 HV主机服务无法启动(wsl安装失败)
  • 缺陷VS质量:为何软件缺陷是质量属性的致命对立面?
  • Python 图像处理之 Pillow 库:玩转图片
  • Graph RAG 迎来记忆革命:“海马体”机制让问答更精准!
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 基础语法:从脚本片段到 EL 表达式
  • 社会力模型:Social force model for pedestrian dynamics
  • 苹果手机备忘录怎么导入安卓手机?
  • 【C#】Clipboard中SetImage(BitmapSource image)的用法
  • Docker 安装与使用
  • 竞争只属于失败者
  • 探索文件IO奥秘:初识文件
  • Java 第十一章 GUI编程(2)
  • C与C++中inline关键字的深入解析与使用指南
  • 景联文科技:以专业标注赋能AI未来,驱动智能时代的精准跃迁
  • Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)
  • 个人模板网站/产品推广策划
  • 网站后台制作用的软件/在线培训平台有哪些
  • 深圳网站建设lxhd/百度极速版app下载
  • 大网站建设/seo流量增长策略
  • 网站的建设步骤包括什么/北京seo收费
  • 怎样注册网站账号申请/公司官网模板