类的析构函数
- 1. 作用:
- 1.1 当对象的地址空间释放的时候,会自动调用析构函数(对象可以主动调用析构函数)
- 1.2 实际应用:往往用来做收尾工作
- 2. 语法规则:
- 示例代码:析构函数使用
1. 作用:
1.1 当对象的地址空间释放的时候,会自动调用析构函数(对象可以主动调用析构函数)
- 栈空间 --》函数调用结束,自动释放,自动析构
- 堆空间 --》函数调用结束不会主动释放,除非你主动调用delete
1.2 实际应用:往往用来做收尾工作
比如:
- 构造函数–》初始化工作,使用open打开一个文件
- 给指针分配堆空间
- 析构函数–》收尾工作,使用close关闭文件
- 主动释放堆空间
2. 语法规则:
~类名()
{
代码
}
特点:
- 析构函数没有任何重载形式
- 析构函数没有任何参数
- 如果程序员没有定义析构函数,系统会自动生成一个析构函数
如果程序员自定义析构函数,那么系统就不会再自动生成默认的析构函数
示例代码:析构函数使用
#include <iostream>using namespace std;class Animal
{
public:// 定义动物的构造函数Animal(){name = new char[10];cout<<"动物的构造函数,当前对象是:"<<this<<endl;}// 定义动物的析构函数~Animal(){delete []name;cout<<"动物的析构函数,当前对象是:"<<this<<endl;}private:char *name;};int main(int argc, char const *argv[])
{//创建三个对象栈空间--》主函数结束的时候,自动释放c1 c2 c3的地址空间--》析构就随之调用Animal a1, a2, a3;// 堆空间Animal *a4 = new Animal;delete a4;return 0;
}/*
执行结果:动物的构造函数,当前对象是:0x7ffcf68aac48动物的构造函数,当前对象是:0x7ffcf68aac50动物的构造函数,当前对象是:0x7ffcf68aac58动物的构造函数,当前对象是:0x563102dd4320动物的析构函数,当前对象是:0x563102dd4320动物的析构函数,当前对象是:0x7ffcf68aac58动物的析构函数,当前对象是:0x7ffcf68aac50动物的析构函数,当前对象是:0x7ffcf68aac48
*/