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

C++特性三:多态---纯析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码 解决方式:将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性:

1.可以解决父类指针释放子类对象

2.都需要有具体的函数实现

虚析构和纯虚析构区别: 如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法: virtual ~类名(){}

纯虚析构语法:

virtual ~类名() = 0;

类名::~类名(){}

代码示例:

#include<iostream>
using namespace std;
#include<string>class Animal
{
public:Animal(){cout << "Animal的构造函数调用" << endl;}//利用虚析构可以解决 父类指针释放子类对象时不干净的问题/*virtual ~Animal(){cout << "Animal的虚析构函数调用" << endl;}*///纯虚析构	需要声明也需要实现    虚析构和纯虚析构只能有一个,故将上面注释//有了纯虚析构之后,这个类也属于抽象类,无法实例化对象virtual ~Animal() = 0;//纯虚函数virtual void speak() = 0;};Animal::~Animal()
{cout << "Animal的纯虚析构函数调用" << endl;
}class Cat :public Animal
{
public:Cat(string name){cout << "Cat构造函数调用" << endl;m_Name = new string(name);//堆区创建属性}virtual void speak(){cout << *m_Name<<"小猫在说话" << endl;}~Cat()//释放{if (m_Name != NULL){cout << "Cat析构函数调用" << endl;delete m_Name;m_Name = NULL;}}string *m_Name;
};void test()
{Animal* animal = new Cat("Tom");animal->speak();//父类指针在析构时候 不会调用子类中析构函数 导致子类如果有堆区属性 出现内存泄露delete animal;
}int main()
{test();return 0;
}

总结:
1.虚析构或纯虚析构都是用来解决通过父类指针释放子类对象
2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构
3.拥有纯虚析构函数的类也属于抽象类

相关文章:

C++特性三:多态---纯析构和纯虚析构

多态使用时&#xff0c;如果子类中有属性开辟到堆区&#xff0c;那么父类指针在释放时无法调用到子类的析构代码 解决方式&#xff1a;将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性&#xff1a; 1.可以解决父类指针释放子类对象 2.都需要有具体的函数实现…...

创建可引导的 macOS 安装器

你可以将外置驱动器或备用宗卷用作安装 Mac 操作系统的启动磁盘。 以下高级步骤主要适用于系统管理员以及其他熟悉在“终端”中输入命令的经验丰富的用户。 升级 macOS 或重新安装 macOS 不需要可引导安装器&#xff0c;但如果你要在多台电脑上安装 macOS&#xff0c;而又不…...

ssm+vue的公廉租房维保系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的公廉租房维保系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

【pycharm】作为Array查看出现数据无法显示问题(已解决)

【pycharm】作为Array查看出现数据无法显示问题&#xff08;已解决&#xff09; 当我们在调试代码的时候&#xff0c;需要对某个变量进行查看&#xff0c;就如同在matlab中&#xff0c;我们可以直接在工作区对某个变量进行双击查看矩阵变量的具体数值 在这里我遇到一个问题&am…...

matlab处理贝塞尔函数

说明:问题来自CSDN-问答板块,题主提问。 需求:在使用解析法求解电机的三维模型,编写程序时需要用到修正的贝塞尔函数,问题是在贝塞尔函数的自变量和阶数变化时函数值变化很大,导致最后求出来的气隙磁密非常大。 一、运行截图 二、解决代码...

【Python】Pycharm 的 python_stubs

Pycharm 的 python_stubs 问题 问题 Pycharm 为了对各种库暴露接口能在编码时提供快速的智能提示&#xff0c;会解析库并在 pycharm 安装目录的 python_stubs 下生成对应的存根&#xff0c;这个操作可以有效的提升 Pycharm 智能提示的效率。但是也有一个问题&#xff0c;称之为…...

AI大模型智能大气科学探索之:ChatGPT在大气科学领域建模、数据分析、可视化与资源评估中的高效应用及论文写作

本文深度探讨人工智能在大气科学中的应用&#xff0c;特别是如何结合最新AI模型与Python技术处理和分析气候数据。介绍包括GPT-4等先进AI工具&#xff0c;旨在帮助大家掌握这些工具的功能及应用范围。本文内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等案例…...

rpc详解rpc框架

文章目录 概述rpc的优点组件工作流程&RPC的底层原理RPC的底层原理 RPC框架rpc框架优点RPC 的实现基础RPC的应用场景RPC使用了哪些关键技术rpc 调用异常一般怎么处理rpc和http的区别为什么RPC要比HTTP更快一些Dubbo和openfeign 区别远程调用RPC框架传输协议传输速度 概述 在…...

【评分标准】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷 无线网络勘测设计

第一部分&#xff1a;无线网络勘测设计评分标准 序号评分项评分细项评分点说明评分方式分值1点位设计图AP编号AP编号符合“AP型号位置编号”完全匹配5AP型号独立办公室、小型会议室选用WALL AP110完全匹配5员工寝室选用智分&#xff0c;其他用放装完全匹配5其它区域选用放装AP…...

停止docker 容器并删除对应镜像

docker 容器相关命令 docker ps 查看当前系统正在运行的容器情况&#xff0c;返回信息分别为&#xff1a; 容器ID&#xff1a;CONTAINER ID 镜像名IMAGE NAMES 运行命令COMMAND 创建时间CREATED 状态STATUS 映射端口 PORTS docker ps |grep XXX 可以…...

什么是服务器,有什么特性?

服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80&#xff05;的数据、信息&#xff0c;服务器作用比较广&#xff0c;网络游戏、网站、部分软件都是需要存到服务器的&#xff0c;还有一些企业会配服务器。今天&#xff0c;德迅云安全带您来…...

【Django】CORS跨域问题

通过 django-cors-headers 库来实现&#xff0c;此方法亲测有效 1、下载 pip install django-cors-headers2、修改 settings.py 配置文件 1&#xff09;添加到应用列表 INSTALLED_APPS (##...corsheaders )2&#xff09;添加到中间件列表 MIDDLEWARE [django.middleware.…...

npm 常用命令详解

npm&#xff0c;即 Node Package Manager&#xff0c;是 Node.js 的包管理器。它允许你安装、更新、删除和管理 Node.js 项目中的依赖包。在 Node.js 开发中&#xff0c;npm 的使用频率极高&#xff0c;掌握其常用命令对于开发者来说是至关重要的。本文将详细解释 npm 的常用命…...

外包干了14天,技术退步明显。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了成都一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…...

RequestResponse使用

文章目录 一、Request&Response介绍二、Request 继承体系三、Request 获取请求数据1、获取请求数据方法&#xff08;1&#xff09;、请求行&#xff08;2&#xff09;、请求头&#xff08;3&#xff09;、请求体 2、通过方式获取请求参数3、IDEA模板创建Servlet4、请求参数…...

知名的CDN厂商CloudFlare简介

Cloudflare是一家总部位于美国的跨国科技公司&#xff0c;提供云端安全、性能优化以及内容交付网络&#xff08;CDN&#xff09;服务。通过其全球分布的服务器网络&#xff0c;Cloudflare帮助网站提高加载速度、保护免受恶意攻击&#xff0c;并提供安全可靠的云端解决方案。除此…...

C语言程序设计-谭浩强

文章目录 1 C语言2 算法3 顺序程序设计3.1 数据的表示形式3.2 输入和输出 4 选择程序结构5 循环程序结构6 数组7 函数模块化8 指针8.1 动态内存分配 9 结构类型9.1 链表9.2 共用体 union9.3 枚举 enum9.4 typedef 10 对文件的输入输出10.1 顺序读写10.2 随机读写 1 C语言 1.1 …...

将OpenCV与gdb驱动的IDE结合使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 ​ 能力 这个漂亮的打印机可以显示元素类型、、标志is_continuous和is_subm…...

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…...

AI原生安全 亚信安全首个“人工智能安全实用手册”开放阅览

不断涌现的AI技术新应用和大模型技术革新&#xff0c;让我们感叹从没有像今天这样&#xff0c;离人工智能的未来如此之近。 追逐AI原生&#xff1f;企业组织基于并利用大模型技术探索和开发AI应用的无限可能&#xff0c;迎接生产与业务模式的全面的革新。 我们更应关心AI安全原…...

2026海洋经济产业链图谱全解析:11万亿背后,藏着哪些机会?

海洋经济是指开发、利用和保护海洋的各类产业活动&#xff0c;以及与之相关联的活动的总和。 2026年3月&#xff0c;中商产业研究院发布了《2026年中国海洋经济产业链图谱及投资布局分析报告》。这不是一份学术论文&#xff0c;而是一张清晰的“产业地图”——它把海洋经济拆成…...

整理了一些大模型的课程,非常详细,大模型零基础入门到精通,建议收藏

本文介绍了多个科普类大模型课程&#xff0c;包括复旦大学的《大模型开发与赋能》专题讲习班、清华大学的自然语言处理实验室与OpenBMB合作的大模型公开课、好未来学而思网校的《人工智能第一课》等。此外&#xff0c;还推荐了吴恩达教授的《AI for Everyone》课程&#xff0c;…...

fMRI(4-1)统计分析报告生成器说明

fMRI 统计分析报告生成器说明 文件&#xff1a;generate_stats_report.m 版本&#xff1a;v1.0 依赖&#xff1a;run_full_pipeline.m run_post_analysis.m 的完整输出 被试分组 CSV 目录 功能概述依赖环境目录结构要求输入参数输出文件全局配置参数调用方式数据预加载流程报…...

【Linux命令饲养指南】01-Linux命令三巨头:pwd、cd、ls,看完这篇你就会了!(附带目录结构大揭秘)

hello 各位老铁&#xff0c;又是学习新知识的时候啦&#x1f60a; 咱们刚接触Linux&#xff0c;看着黑乎乎的终端一脸懵&#xff1f;别慌&#xff0c;今天我们用大白话去搞定最常用的命令和Linux的目录结构。本文为个人原创学习整理&#xff0c;AI 仅辅助排版与润色一、Linux的…...

【仅限首批开放】AIAgent多目标优化内参白皮书(含NASA JPL/蚂蚁/字节联合验证的MOO-SLAM架构图谱与5类业务场景映射表)

第一章&#xff1a;AIAgent多目标优化的范式演进与核心挑战 2026奇点智能技术大会(https://ml-summit.org) 传统单目标强化学习框架在面对真实世界AI代理&#xff08;AIAgent&#xff09;任务时日益显现出结构性局限——用户意图模糊性、环境动态性、资源约束多样性与伦理对齐…...

从销售转行AI Agent:我是怎么做到的

就像十几年前移动互联网刚兴起的时候&#xff0c;那时候会搞安卓APP的人&#xff0c;哪怕学历不高&#xff0c;现在很多都成了大佬。 现在是AI Agent的黄金窗口期&#xff0c;需求大&#xff0c;但能踏踏实实干实事的人太少。 你要做的就是能成为那个能干活的人。 “钱景”是肯…...

模块化多电平变换器MMC的NLM与CPS-PWM调制策略仿真实现(交流3000V-直流5000...

模块化多电平变换器MMC两种调制策略实现&#xff08;交流3000V-直流5000V整流&#xff09;仿真&#xff0c;单桥臂二十子模块&#xff0c;分别采用最近电平逼近NLM与载波移相调制CPS-PWM实现&#xff0c;仿真中使用环流抑制&#xff0c;NLM中采用快速排序&#xff0c;两个仿真动…...

向量记忆 vs 实体记忆 vs 元认知记忆,深度拆解SITS2026定义的AIAgent长期记忆三维模型

第一章&#xff1a;SITS2026定义的AIAgent长期记忆三维模型总览 2026奇点智能技术大会(https://ml-summit.org) SITS2026标准首次系统性地将AI Agent的长期记忆建模为具有时间维度、语义粒度与访问拓扑三个正交轴的统一三维结构。该模型突破了传统键值存储或向量数据库的单维索…...

YOLO与强化学习的融合:构建智能视觉决策系统

1. 为什么需要YOLO与强化学习的融合 在智能系统领域&#xff0c;视觉感知和决策能力就像人的眼睛和大脑。YOLO&#xff08;You Only Look Once&#xff09;作为当前最先进的目标检测算法之一&#xff0c;能够快速准确地识别图像中的物体。而强化学习则擅长通过与环境交互来学习…...

CD-HIT安装踩坑实录:从Conda到源码编译,哪种方式最适合你的Linux服务器?

CD-HIT安装踩坑实录&#xff1a;从Conda到源码编译&#xff0c;哪种方式最适合你的Linux服务器&#xff1f; 生物信息学工具CD-HIT作为序列去冗余的黄金标准&#xff0c;几乎出现在每篇涉及高通量测序分析的论文方法部分。但当你第一次在实验室服务器上尝试安装它时&#xff0c…...