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

【和春笋一起学C++】(三十七)类的析构函数

目录

1.、析构函数的作用和特性

2、实例


1.、析构函数的作用和特性

接上篇文章《【和春笋一起学C++】(三十六)类的构造函数》,用类的构造函数创建对象后,程序将跟踪该对象,直到对象过期。对象过期时,程序将自动调用一个特殊的函数——析构函数,用于完成清理工作。例如,在构造函数中使用new开辟了一块内存,则析构函数将使用delete来释放这些内存。

析构函数的名称也很特殊,在类名前加上“~”,如上篇文章中Student类的析构函数为~Student()。析构函数没有返回值和声明类型,也没有函数参数,因此对于Student类的析构函数的原型,它必须是~Student()。

那什么时候调用析构函数呢?一般是在对象的生命周期结束时,由系统自动调用析构函数。具体有以下几种情况:

  • 如果创建的是静态存储类对象,则其析构函数在程序结束时自动被调用;
  • 如果创建的是自动存储类对象,则其析构函数在代码块结束时自动被调用;
  • 如果对象是通过new创建的,则当使用delete释放对象占用的内存时析构函数被自动调用;

如果类中没有提供析构函数,那么编译器将自动生成一个默认的析构函数。


原文为CSDN作者:三月微暖寻春笋


2、实例

将上篇文章中的Student类声明改为如下形式。

class Student
{
public:Student();Student(int yuwen_score_, int shuxue_score_, int yingyu_score_);~Student();void scoreSet(int yuwen_score_, int shuxue_score_, int yingyu_score_);int get_average_score();
private:std::string name;int *num;unsigned short yuwen_score;unsigned short shuxue_score;unsigned short yingyu_score;void show_score();
};

在私有数据成员中有一个int类的指针,使用默认构造函数对数据成员进行初始化如下:

Student::Student()
{name = "xxx";num = new int[8];for (int i = 0; i < 8; i++){num[i] = 0;}yuwen_score = 80;shuxue_score = 90;yingyu_score = 85;
}

默认构造函数中使用new开辟了占据8个int类型数据的内存空间,用于存储学生的学号。这段内存空间如果在析构函数中没有使用delete释放,则该类的自动存储类对象在代码块运行结束后,这段内存空间将不会被释放,从而导致内存泄露。所以,必须要在析构函数中使用delete来释放这段内存空间,不能使用编译器提供的默认析构函数。析构函数应定义为如下:

Student::~Student()
{delete[] num;
}

http://www.dtcms.com/a/353123.html

相关文章:

  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • Linux 服务器故障全解析:常见问题及处理方法大全
  • 极简风格PDF格式转换解决方案
  • java将doc文件转pdf
  • PDF补丁丁:开源多年,完全免费的多功能 PDF 工具箱
  • Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载
  • 像WPS Office 一样处理pdf页面尺寸
  • OpenGL 视差贴图
  • UVa11607 Cutting Cakes
  • Java垃圾回收器:从SerialGC到G1的演进/速通
  • 流程控制语句(1)
  • 如何检查 Linux 系统的内存使用情况
  • vue2实现背景颜色渐变
  • 【目标检测】论文阅读4
  • 分布式2PC理论
  • 大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
  • (11)用于无GPS导航的制图师SLAM(一)
  • 【Android】原安卓生态发起网络GET请求 Post请求
  • 【87页PPT】智慧方案智慧校园智能化综合建设方案(附下载方式)
  • Linux操作系统—进程
  • 基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南
  • 【HTML】隐藏滚动条但保留功能
  • 年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)
  • Playwright进阶指南 (6) | 自动化测试实战
  • 从 GRIT 到 WebUI:Chromium 内置资源加载与前端展示的完整链路解析
  • 寻找AI——初识墨刀AI
  • 【FPGA】VGA显示-贪吃蛇
  • oracle 表空间扩容(增加新的数据文件)
  • 浅聊达梦数据库物理热备的概念及原理
  • VESA时序检测模块设计verilog实现