概念:
与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。
而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
特征:
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;
}
局部对象(后定义先析构) -> 局部的静态 ->全局对象(后定义先析构)