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

C++智能指针

分类
C++智能指针有share_ptr, unique_ptr, weak_ptr, auto_ptr, 其中auto_ptr是C++98中的用法,C++11已经弃用了。weak_ptr是为了配合share_ptr工作而引入的智能指针,其没有共享资源,其构造也不会引起指针引用计数的增加。weak_ptr主要是防止share_ptr出现循环引用和内存泄漏的问题。

share_ptr和unique_ptr的联系和区别
联系:

1.都是智能指针:区别于普通指针,能利用类的特性,避免内存泄漏问题;

2.RAII(资源获取即初始化):它们基于RAII原则,确保在离开作用域时释放相关资源,无需手动调用delete;

区别:

1.所有权管理不同:unique_ptr不允许多指针共享资源,同一时刻只能有一个unique_ptr指向给定对象;而多个share_ptr可以共享资源,可以访问同一个共享内存。share_ptr通过引用计数来管理资源的生命周期。当最后一个shared_ptr销毁时,内存才会被释放;

2.性能开销:unique_ptr没有引用计数的开销,比share_ptr更轻量级;share_ptr需要维护引用计数;

3.安全性:unique_ptr不会出现循环引用问题,但share_ptr可能出现循环引用和内存泄漏问题,share_ptr必要时得和weak_ptr一起使用。

share_ptr的特性
1.多种重载:解引用运算符重载(解引用运算符*和箭头运算符->),比较运算符重载(相等运算符==和不等运算符!=),bool运算符重载,赋值操作符重载(允许将一个std::shared_ptr赋值给另一个,并处理引用计数的递增和递减),这些重载使得share_ptr具备普通指针的性质;

2.线程安全

同一个share_ptr被多个线程读是安全,但写不安全的。只有共享引用计数的不同share_ptr被多个线程写才是安全的。

相关文章:

  • 【Fastadmin/ThinkPHP5】使用Queue队列方法详细步骤
  • Leetcode 11. 盛最多水的容器
  • Spring八股 常见面试题
  • IDEA开发环境热部署
  • 用冒泡排序模拟C语言中的内置快排函数qsort!
  • vue项目如何解决金额计算超过15出现精度丢失问题
  • 自然语言处理(NLP)技术
  • 前端按钮动画
  • npm install的-S和-D的区别
  • iOS中卡顿产生的主要原因及优化思路
  • Apache Paimon Append Queue表解析
  • 【语音识别】- 几个主流模型
  • 数据库的介绍、分类、作用和特点
  • 【C++精简版回顾】14.(重载2)流重载
  • 【Python】python离线安装依赖
  • 3D工业相机及品牌集合
  • 蓝月亮,蓝禾,三七互娱,顺丰,康冠科技,金证科技24春招内推
  • git入门
  • PCIE Order Set
  • java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
  • 柳州警方通报临牌车撞倒行人:扣留涉事车辆,行人无生命危险
  • 美军空袭也门拘留中心,已致68人死亡
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”
  • 国家发改委:建立实施育儿补贴制度
  • 十大券商看后市|A股风险偏好有望边际改善,市场仍处黄金坑
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园