概念:
与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。
而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
特征:
1. 析构函数名是在类名前加上字符 ~
2. 无参数无返回值类型。
3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。
注意:析构 函数不能重载
4. 对象生命周期结束时,C++编译系统系统自动调用析构函数
5.编译器默认生成的析构函数和构造函数一样,不会处理内置类型,对于自定义类型会去它们的内部调用它们的析构函数
6.如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数
析构函数的功能类似于 栈、链表、队列的distroy的功能,用来进行内部空间的清理和释放,而于这些数据结构的distory 功能不同,在有了析构函数栈之后,这些数据结构,就不需要再写distorty 因为析构函数会在这是变量结束后自动进入清理模式
使用析构函数的对比:
使用前
使用后
后进先出:
如上图代码所示,析构函数会先将后面定义的函数进行释放,这就是后进先出
class Date
{
public:
Date(int year = 1)
{
_year = year;
}
~Date()
{
cout << "~Date()->"<<_year<< endl;
}
private:
// 基本类型(内置类型)
int _year;
int _month;
int _day;
};
void func()
{
Date d3(3);
static Date d4(4);//静态的
}
Date d5(5);
static Date d6(6);//静态的
// 局部对象(后定义先析构) -》 局部的静态 -》全局对象(后定义先析构)
int main()
{
Date d1(1);
Date d2(2);
func();
return 0;
}
局部对象(后定义先析构) -> 局部的静态 ->全局对象(后定义先析构)