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

【C++】类和对象3:默认成员函数之析构函数

前言

这篇文章我们来学习默认成员函数中的析构函数

概念

析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

特性

析构函数是特殊的成员函数,其特征如下:

  1. 析构函数名是在类名前加上字符 ~
  2. 无参数无返回值类型。
  3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载
  4. 对象生命周期结束时,C++编译系统系统自动调用析构函数 (析构顺序:先销毁局部成员 后定义先销毁 最后销毁全局)

下面展示关于栈的释放的两种方式

typedef int DataType;
class Stack
{
public:Stack(size_t capacity = 3){_array = (DataType*)malloc(sizeof(DataType) * capacity);if (NULL == _array){perror("malloc申请空间失败!!!");return;}_capacity = capacity;_size = 0;}void Push(DataType data){// CheckCapacity();_array[_size] = data;_size++;}// 其他方法...~Stack(){if (_array){free(_array);_array = nullptr;_capacity = 0;_size = 0;}}
private:DataType* _array;int _capacity;int _size;
};
void TestStack()
{Stack s;s.Push(1);s.Push(2);
}
  1. 关于编译器自动生成的析构函数,是否会完成一些事情呢?下面的程序我们会看到,编译器生成的默认析构函数,对自定类型成员调用它的析构函数, 内置类型成员不做处理
class Time
{
public:~Time(){cout << "~Time()" << endl;}
private:int _hour;int _minute;int _second;
};
class Date
{
private:// 基本类型(内置类型)int _year = 1970;int _month = 1;int _day = 1;// 自定义类型Time _t;
};
int main()
{Date d;return 0;
}
// 程序运行结束后输出:~Time()
// 注意:创建哪个类的对象则调用该类的析构函数,销毁那个类的对象则调用该类的析构函数
  1. 如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。

结语

对于析构函数的学习就到这里 我们下篇文章见 希望你有所收获~

http://www.lryc.cn/news/293717.html

相关文章:

  • 2024美赛C题完整解题教程及代码 网球运动的势头
  • 二、人工智能之提示工程(Prompt Engineering)
  • 【leetcode题解C++】98.验证二叉搜索树 and 701.二叉搜索树中的插入操作
  • 【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)
  • 微信小程序之本地生活案例的实现
  • 智能决策的艺术:探索商业分析的最佳工具和方法
  • C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】
  • 政安晨的AI笔记——Bard大模型最新提示词创作绘画分析
  • 基础算法bfs -剪枝问题
  • 在Meteor Lake上测试基于Stable Diffusion的AI应用
  • 情人节心动礼物:共度情人节美好时刻的礼物推荐
  • 远程手机搭建Termux环境,并通过ssh连接Termux
  • 基于EdgeWorkers的边缘应用如何进行单元测试?
  • 【linux】校招中的“熟悉linux操作系统”一般是指达到什么程度?
  • 【CSS系列】常用容易忽略的css
  • Java 数据结构 二叉树(二)红黑树
  • React18-完成弹窗封装
  • 蓝桥杯2024/1/31-----底层测试模板
  • 蓝桥杯备战(AcWing算法基础课)-高精度-乘-低精度
  • C++设计模式-里氏替换原则
  • compose LazyColumn + items没有自动刷新问题
  • Java八大常用排序算法
  • 编程笔记 html5cssjs 075 Javascript 常量和变量
  • 题目 1159: 偶数求和
  • 呼吸灯--FPGA
  • MySQL数据库①_MySQL入门(概念+使用)
  • 虚幻UE 特效-Niagara特效实战-魔法阵
  • Qt多语言翻译
  • Latex学习记录
  • 你在做绩效考核,还是绩效管理?二者有什么区别