C++循环引用

C++循环引用‌指的是两个或多个类之间互相引用对方,形成一个循环的引用关系。

循环引用的问题:

        编译错误‌:编译器在编译过程中会按照包含关系依次编译每个文件,当编译ClassA时,它会尝试包含ClassB.h文件,而ClassB.h文件又尝试包含ClassA.h文件,形成循环的包含关系,导致编译器陷入死循环,最终导致编译错误‌。

        运行时错误‌:在对象的构造和析构函数中可能会出现问题,例如类A的对象被析构时,会调用类B的析构函数,而类B的析构函数又会调用类A的析构函数,形成无限循环的析构函数调用,耗尽程序内存,产生段错误或栈溢出等运行时错误‌。‌

        代码可读性降低‌:循环依赖会导致代码结构复杂,使得开发者在阅读和理解代码时更加困难‌。

        编译时间增加‌:编译器需要处理更多的依赖关系,导致编译时间变长‌。

‌        维护难度加大‌:由于代码结构混乱和耦合度过高,维护和修改代码时可能会遇到更多的困难‌。

‌        可扩展性降低‌:限制模块之间的独立性,使得在扩展或重构项目时面临更多挑战‌。

避免循环引用的方法:

        使用前向声明‌:在头文件中不直接包含相互引用的类的定义文件,而是使用前向声明。例如,在ClassA.h中使用类B的前向声明,而不是直接包含ClassB.h文件‌。

‌        抽象出父类‌:将相互引用的类抽象为父类,然后通过派生类来实现具体的功能。

‌        借助第三类抽离耦合部分函数‌:通过引入一个第三方类来分离两个相互引用的类的耦合部分‌。

        使用智能指针‌:例如使用std::weak_ptr来避免循环引用问题‌。

‌        函数绑定‌:通过函数绑定来避免直接的对象引用‌。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

Qt中的Model与View 4:QStandardItemModel与QTableView

目录 QStandardItemModel API QTableView 导航 视觉外观 坐标系统 API 样例:解析一个表格txt文件 QStandardItemModel QStandardItemModel 可用作标准 Qt 数据类型的存储库。它是模型/视图类之一,是 Qt 模型/视图框架的一部分。它提供了一种基于…

web——sqliabs靶场——第一关

今天开始搞这个靶场,从小白开始一点点学习,加油!!!! 1.搭建靶场 注意点:1.php的版本问题,要用老版本 2.小p要先改数据库的密码,否则一直显示链接不上数据库 2.第一道题&#xff0…

Markdown快速上手(typora)

一级标题~六级标题 可以选中文本在这里直接设置,后面也有快捷键,也可以使用其语法,一个#,对应一级标题,两个#,对应二级标题,等。 我这里使用Ctrl1没生效是因为快捷键冲突,也需要注意…

一招解决Mac没有剪切板历史记录的问题

使用Mac的朋友肯定都为Mac的剪切功能苦恼过,旧内容覆盖新内容,导致如果有内容需要重复输入的话,就需要一次一次的重复复制粘贴,非常麻烦 但其实Mac也能够有剪切板历史记录功能,iCopy,让你的Mac也能拥有剪切…

在鱼皮的模拟面试里面学习有感

文章目录 1.上半场1.1.引言1.2.鱼皮的建议 2.下半场2.1中间问题 3.我的总结3.1我的体会3.2我的计划 1.上半场 今天的直播,第一次全程的跟下来:也算是放松一下~~ 1.1.引言 上半场是后来总结的,听的时候没有随手记录: 1&#xf…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤: 一、环境准备 机器配置 确保两台机器(假设为服务器 A 和服务器 B)能够互相通信,例如它们在同一个局域网内,并且开放了 MySQL 通信所需的端口(默认是 …

MQTT从入门到精通之MQTT入门

MQTT入门 1 MQTT概述 1.1 MQTT简介 MQTT(Message Queuing Telemetry Transport)由IBM于1999年开发的一种基于**"发布订阅模式"的轻量级的消息传输协议**! 发布订阅模式是一种传统的客户端-服务器架构的替代方案,因为…

python在word中插入图片

本文讲解python如何在word文档中插入图片,以及指定插入图片的段落。 1、在新建的word文档中插入图片 import win32com.client as win32 from win32com.client import constants # 1)打开word应用程序 doc_app win32.gencache.EnsureDispatch(Word.App…

Linux(CentOS)安装 Nginx

CentOS版本:CentOS 7 Nginx版本:1.24.0 有两种安装方式 一、通过编译源码包安装 编译源码包:.tar.gz或.tar包文件 1、下载 Nginx 打开Nginx官网:https://nginx.org/ 2、上传 Nginx 文件到 CentOS 使用FinalShell远程登录工…

TESSY学习笔记—project view界面的架构

1:project view界面能添加的元素 project view界面能添加的元素(暂且称为元素),打开project view界面,下图中红框勾选出来的就是 2:一共存在5种可添加元素 **1)Test collection 测试集合&…

vue中如何关闭eslint检测?

ESLint作为一个用于JavaScript代码的验证工具,主要用于检查代码语法和编码规范。本文旨在指导那些希望在Vue.js项目中禁用ESLint验证功能的用户。对于需要这一操作的朋友,以下内容将提供参考。 vue中如何关闭eslint检测? 有了eslint的校验&…

uniApp之uni-file-picker使用踩坑

标题党~也不算坑吧 就是初体验 上传是需要存储一下子的,我以为uniApp是自己免费开的服务给大家中转使用,就没管这个事,但是官网是这么说的: 就我是怎么发现的,使用了一段时间后,上传的图片都裂了&#xff…

K8s小白入门

文章目录 前言一、特性二、集群的结构控制平面内部组件Node内部组件 三、Docker与K8s的关系总结 前言 Kubernetes(K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。是支持云原生部署的一个平台,它前生是谷…

[asdf] 管理erlang 版本--ubuntu 16.04

部分网址 asdf 官网:快速入门 | asdf elang 插件网址:https://github.com/asdf-vm/asdf-erlang rebar 插件网址:https://github.com/Stratus3D/asdf-rebar 安装asdf 先安装依赖,默认装了git 可只安装curl apt install curl git 2、安装as…

微信小程序 uniapp网络记账设计个人理财系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 aa账簿 (自动编号、用户id、用户账号、备注、登记时间、消费类型、创建时间、消费金额); 配置文件 (自动编…

【VR】PICO 手部追踪 steamvr内无法识别,依旧识别手柄的解决方案

一、问题描述 && 原因分析 1.PICO4 手部追踪 steamvr内无法识别,依旧识别手柄的解决方案 尽管平放(或关闭手柄连接)之后,在 PICO 一体机中进入了手部追踪状态, 但只要进入 steamvr,就无法正确识别…

React中类组件和函数组件的理解和区别

react代码模块分为类组件和函数组件。 从语法和定义、内部状态管理、生命周期、性能、可读性和维护性、上下文、集成状态管理库等角度对比React中类组件和函数组件。 1、语法和定义 类组件: 使用 ES6 的类(class)语法定义的 React 组件。…

ruoyi-vue集成tianai-captcha验证码

后端代码 官方使用demo文档&#xff1a;http://doc.captcha.tianai.cloud/#%E4%BD%BF%E7%94%A8demo 我的完整代码&#xff1a;https://gitee.com/Min-Duck/RuoYi-Vue.git 主pom.xml 加入依赖 <!-- 滑块验证码 --><dependency><groupId>cloud.tianai.captc…

ctfshow(316)--XSS漏洞--反射性XSS

Web316 进入界面&#xff1a; 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题&#xff0c;看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台&#xff0c;显示的cookie还是这样…