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

智能指针(unique_ptr,shared_ptr,weak_ptr)

在实际的C++开发中,我们经常会遇到诸如程序运行中突然崩溃,程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的(内存泄漏)
比如:

        有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用

        int *p = new int[100];

        delete [] p; // p指向的空间已经被释放

        

        // p指向了已经释放的空间

        *p = 1024; // 操作不属于自己的内存

        

        有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行奔溃) ----- double free

        

        没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多

                void get_memory(char *p) {

                        p = new char[100];

                }

针对以上这些情况,很多程序员认为C++语言应该提供更友好的内存管理机制,这样就可以将精力集中于开发项目的各个功能上


事实上,内存管理的替代方案很早就有了,早在1959年前后,就有人提出了“垃圾自动回收”机制。所谓垃圾,指的是那些不再使用或者没有任何指针指向的内存空间,而“回收”则指的是将这些“垃圾”收集起来以便再次利用

如今,垃圾回收机制已经大行其道,得到了诸多编程语言的支持,例如:Java,Python,C#,PHP等
而C++虽然从来没有公开的支持过垃圾回收机制,但C++98/03标准中,支持使用auto_ptr智能指针来实现堆内存的自动回收

C++11新标准在废弃auto_ptr的同时,增添了unique_ptr,shared_ptr以及weak_ptr这3个智能指针来实现堆内存的自动回收
 

所谓智能指针,可以从字面上理解为“智能”的指针,具体来讲,智能指针和普通指针的用法是相似的(->/*),不同之处在于,智能指针可以在适当时机自动释放分配的内存,也就是说,使用智能指针可以很好地避免“忘记释放内存而导致内存泄漏”问题出现,由此可见,C++也逐渐开始支持垃圾回收机制了,尽管目前支持程度还有限

               

            

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

相关文章:

  • Sql执行较慢的排查方式
  • CesiumJS 案例 P6:添加图片图层、添加图片图层并覆盖指定区域
  • Python画笔案例-094 绘制 神奇彩条动画
  • javaScript整数反转
  • Zookeeper面试整理-故障排查和调试
  • PG数据库之索引详解
  • springboot项目测试环境构建出的依赖包比本地构建出的依赖包多
  • 温湿度传感器(学习笔记上)
  • sv标准研读第十九章-功能覆盖率
  • 图集短视频去水印云函数开发实践——小红书
  • Uni-App-03
  • 解决 VScode 每次打开都是上次打开的文件问题
  • redis高级篇之skiplist跳表 第164节答疑
  • Java 线程池:深入理解与高效应用
  • week08 zookeeper多种安装与pandas数据变换操作-new
  • js构造函数和原型对象,ES6中的class,四种继承方式
  • 电脑连接海康相机并在PictureBox和HWindowControl中分别显示。
  • 直播系统源码技术搭建部署流程及配置步骤
  • Spring+ActiveMQ
  • Linux 常用命令总汇
  • fmql之Linux RTC
  • Flask-SocketIO 简单示例
  • Vue 3 的组件式开发(2)
  • python 爬虫 入门 四、线程,进程,协程
  • cloak斗篷伪装下的独立站
  • 【Nas】X-DOC:在Mac OS X 中使用 WOL 命令唤醒局域网内 PVE 主机
  • u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法
  • Linux系统之dc计算器工具的基本使用
  • 使用Python计算相对强弱指数(RSI)进阶
  • vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案