智能指针交叉引用问题怎么解决?

概念

类A中有一个指向类B的shared_ptr强类型智能指针,类B中有一个指向类A的shared_ ptr强类型智能指针。在main函数中创建类A,类B的智能指针并且调用,此时,有两个强智能指针指向了对象A,对象A的引用计数为2。也有两个强智能指针指向了对象B,对象B的引用计数为2。
当主函数return以后,对象A的引用计数减一成为1,对象B的引用计数减一成为1,此时因为引用计数不为0,所以不能析构对象释放内存,程序结束造成内存泄漏。

解决方法

定义对象的时候,使用强智能指针shared_ptr,而引用对象的时候使用弱智能指针weak_ptr;也就是将类A和类B中的shared_ptr强智能指针都换成weak_ptr弱智能指针,当通过weak_ptr访问对象成员时,需要先调用weak_ptr的lock提升方法,把weak_ptr提升成shared_ptr强智能指针,再进行对象成员调用,如果提升以后引用计数不为0,说明对象没有被析构,可以提升成功,访问对象成员。
weak_ptr弱智能指针,虽然有引用计数,但实际上它并不增加计数,只是起到观察对象的作用,weak_ptr的引用计数指的是有多少个weak_ptr在观察同一个shared_ptr。而shared_ptr强智能指针的引用计数是对资源的引用计数所以此时对象A的引用计数只为1,对象B的引用计数也只为1。当主函数return返回后,对象A的引用计数减一成为0,对象B的引用计数成为0,AB进行正常的析构,此时不会造成内存泄漏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁将决战上海滩,决定权在你手里

关注我们 - 数字罗塞塔计划 - 5月6日雨轩兰台的《【大比武01】AIGC赋能档案文创设计的尝试》,打响了“华夏伟业”杯第二届大比武活动的第一枪,截止到5月31日,入选的10篇优质内容已全部揭晓,好评如潮。感谢雨轩兰台、微柏软件、昀…

三种常见的报表模板,省时又方便

前言 在业务应用和数据分析中,报表是一种常见的数据展示形式,可以帮助用户更直观地理解和解读数据。然而,每次创建和设计一款报表都需要花费大量的时间和精力。为了提高报表设计的效率,本文小编以葡萄城公司的嵌入式BI工具——Wy…

webf 开发工具:数据库持久层基础文件生成工具

WZW.SqlMapHelpForJava是运行在.Net Framework4.0上的数据库持久层基础文件生成工具,支持多种关系型数据库的持久层基础文件、Java类的生成以及对配置文件的更新,与webf框架进行紧密配合,减少了数据库持久层基础文件编写工作量,提…

关于家储用防逆流电流互感器AKH-0.66/K K-φ16 100A/40mA详细介绍-安科瑞 蒋静

1.产品特点 产品外形美观,安装、接线方便,专用于通讯机房 100A 及以下配电系统改造,可与 AMC16 多回路监控仪表配合使用。 2.型号说明 3.外形尺寸(公差:2mm) 4.规格参数对照表 5.使用环境 (1)额定工作…

SPME2024开幕在即,深兰科技商用清洁机器人新品推介会蓄势待发

6月5日~7日,以“跨界融合洞见未来”为主题的“2024 SPME第六届上海国际物业管理产业博览会”(以下简称“物博会”)将在上海世博展览馆举行。应主办方邀请,深兰科技携多款AI清洁机器人亮相本届展会,向来自全球各地的观展企业家、经…

java:poi导出word文档

导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>…

一起学大模型 - LangChain 的 OutputParser

文章目录 前言一、 OutputParser 的概述二、 JSON OutputParser三、自定义格式解析器1. 假设的自定义格式2. 实现 CustomFormatOutputParser3. 更复杂的自定义格式 四、 正则表达式解析器1. 示例&#xff1a;正则表达式解析器2. 假设的语言模型输出3. 实现 RegexOutputParser4.…

phpstudy配置的站点不能访问了

无法打开站点 打开网站的时候出现如下 没有人为主动去更改配置项&#xff0c;今天就不能正常访问了 检查了一遍配置&#xff0c;发现并无大碍&#xff0c;那就重新配置一遍看看 配置phpstudy 1、新建网站 2、选择项目入口文件夹 3、配置伪静态 4. 确认保存 在我的电脑 C:\…

C# using的几个用途

using 关键字有三个主要用途&#xff1a; 1.using 语句定义一个范围&#xff0c;在此范围的末尾将释放对象&#xff1a; string filePath "example.txt"; string textToWrite "Hello, this is a test message!"; // Use the using statement to ensure …

JVM优化之垃圾收集底层算法实现

JVM优化之垃圾收集底层算法实现 三色标记多标-浮动垃圾多标多标过程 浮动垃圾处理浮动垃圾总结 漏标-读写屏障漏标读写屏障读屏障写屏障应用实例总结 记忆集与卡表记忆集记忆集的作用记忆集的实现 卡表卡表的作用卡表的实现 应用实例总结 在并发标记过程中&#xff0c;用户线程…

Hive的常规操作

Hive常规操作 hive常用交互命令 -e执行sql语句 [rootmaster ~]# hive -e "show databases";-f执行sql脚本 [rootmaster ~]# hive -f /usr/local/demo.sql查看hive中输入的所有命令 [rootmaster ~]# cat ~/.hivehistory操作库 创建库 语法&#xff1a; create…

用贪心算法计算十进制数转二进制数(整数部分)

十进制整数转二进制数用什么方法&#xff1f;网上一搜&#xff0c;大部分答案都是用短除法&#xff0c;也就是除2反向取余法。这种方法是最基本最常用的&#xff0c;但是计算步骤多&#xff0c;还容易出错&#xff0c;那么还有没有其他更好的方法吗&#xff1f; 一、短除反向取…

Stage #3 选择列表中的XSS注入:技巧与实操

在Web安全的学习旅程中&#xff0c;理解跨站脚本&#xff08;XSS&#xff09;攻击的多种形态至关重要。"XSS Challenges"闯关游戏的Stage #3专注于教授如何在选择列表中执行XSS注入。本文将详细介绍这一阶段的实操技巧和学习重点。 1. 挑战页面概览 学习者首先访问…

FreeRTOS学习笔记-基于stm32(8)消息队列

一、什么是消息队列 队列是不同任务、中断中数据传递的一种机制&#xff0c;又称消息队列。就类似于全局变量&#xff0c;将数据传输到不同的任务中。但全局变量没有写保护&#xff0c;容易造成数据受损。而消息队列中加入了进入临界区的写保护。 队列类似于数组&#xff0c;可…

关于WIN环境下pip DeepSpeed安装报错问题

问题描述 安装resemble-enhance项目时遇到的问题: >>> ERROR 1error: subprocess-exited-with-errorpython setup.py egg_info did not run successfully.exit code: 1[15 lines of output]test.cLINK : fatal error LNK1181: cannot open input file aio.libTraceb…

一维时间序列信号的基于小波集的时频超分辨率分析方法(Python)

由于小波变换只能反映信号的零维奇异性&#xff0c;即只能表达奇异点的位置和特性。事实上具有线奇异的函数在高维空间中非常普遍&#xff0c;例如&#xff0c;自然物体光滑边界使得自然图像的不连续性往往体现为光滑曲线上的奇异性&#xff0c;而并不仅仅是点奇异。对于一个二…

如何科学识别solidworks价格是否合理

Solidworks作为一款在很多领域中都非常重要的设计管理软件而备受人们的关注&#xff0c;该类软件在国内相关渠道中持续得到很多技术单位及行业内人士的喜爱和信任&#xff0c;在人们购买该软件的时候关于各类线上及线下渠道的solidworks都有很大的兴趣。接下来主要分析下如何科…

人工智能专业现代学徒制人才培养质量评价体系构建

一、 引 言 随着信息时代的发展&#xff0c;人工智能&#xff08;AI&#xff09;技术的飞跃进步对各行各业产生了深远影响&#xff0c;对专业人才的培养提出了更高要求。现代学徒制作为一种创新人才培养模式&#xff0c;通过校企合作&#xff0c;强调理论与实践的深度结合&…

性能测试学习-基本使用-元件组件介绍(二)

jmeter优点是&#xff1a;开源免费&#xff0c;小巧&#xff0c;丰富的学习资料和扩展组件 缺点是&#xff1a;1.不支持IP欺骗&#xff0c;分析和报表能力相对于LR欠缺精确度&#xff08;以分钟为单位&#xff09; 工具用户量分析报表IP欺骗费用体积扩展性Loadrunner多(万)精…

Lumière:开创性的视频生成模型及其应用

视频内容创造领域迎来了突破性进展&#xff0c;但视频生成模型由于运动引入的复杂性而面临更多挑战。这些挑战主要源自运动的引入所带来的复杂性。时间连贯性是视频生成中的关键要素&#xff0c;模型必须确保视频中的运动在时间上是连贯和平滑的&#xff0c;避免出现不自然的跳…