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

析构——循环引用

析构——循环引用

有如下结构:

  A包含B的引用,B包含C的引用,他们都通过引用计数的方式实现析构。

  若此时,释放A,A会减少对B的引用计数,但由于C的引用,B的计数不可能降为0,于是B不会自动释放,C也不会去自动释放。

  这样的结果是A释放了,但只要程序还存活,B、C循环引用,依旧不会被释放,只有当程序整个退出时,才会被系统回收全部资源。

  破解的方法:

  一、在析构A时,强制析构掉B,这样会触发C的计数减少,从而在释放B时C能得到释放。

  二、直接避免逆向引用,仅使用自上而下的引用,自下而上的引用变更为使用记录ID的方式,或者仅在调试时使用宏开启该功能。

http://www.hskmm.com/?act=detail&tid=20004

相关文章:

  • 一些树上问题
  • 如何用 ShedLock 让 Spring Boot 的定时任务在多实例环境下只执行一次
  • 故障处理:Oracle表空间异常增长后又恢复正常的故障模拟与分析
  • Oracle故障分析:lsnrctl start启动监听很慢(AIX平台)
  • 第十届新能源系统、电气与电力国际学术会议 (NESEP 2025)
  • 数据结构 - 二叉树的非递归方式遍历
  • 1208. 翻硬币
  • C# Avalonia 15- Animation- CachingTest
  • CF838D Airplane Arrangements
  • java操作数据库中的bug
  • 事务和Spring常用注解的总结
  • 浅谈SQL应用考试,临时抱佛脚篇
  • 网络安全风险评估指南:CISO如何通过风险评估提升安全防护
  • 藏好自己,做好清理——悼念沈劫匪先生有感
  • macbook m1 安装telnet
  • 低空经济:从政策热词到生活日常——中国低空经济全景解析与杭深模式对比 - 教程
  • 指数函数的特征
  • 生猪
  • git merge driver简介
  • 在 Linux 中安装和配置 NTP 服务器和 NTP 客户端
  • Android15音频进阶之车载多音区调整解析(一百三十七)
  • 微信二次开发社群机器人接口
  • FireDAC(Master-Detail 功能)主从表查询
  • 极氪汽车火山引擎:AI数据专家“上岗”,注入“分钟级”数据洞察力
  • C++面试宝典 01 new/delete/malloc/free关系
  • Ansible + Docker 部署 MinIO 集群
  • ​​万用表与电流探头测量电流信号的技术对比分析​​
  • flink运行时架构 - --
  • k8s命令
  • wifi亮灭屏机制--系统修改