1.特征
析构函数是特殊的成员函数,其特征如下:
1.析构函数名是在类名前加上字符~。
2.无参数无返回值类型。
3.一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载。
4.对象生命周期结束时,c++编译系统自动调用析构函数
5.默认生成的析构函数与构造函数类似,对于内置类型不做处理,自定义类型的成员回去调用它的析构函数。
2.功能
析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
3.关于析构函数的自动调用
上文中提到,对象生命周期结束时,c++编译系统自动调用析构函数。那什么时候对象生命周期结束呢?
这里总结了两点:
对于局部的对象:在它所在的函数结束时,生命周期结束。
对于全局或静态的对象:在main函数结束时,生命周期结束。
且满足后定义的先析构:
对于局部的对象:后定义的先析构。
对于全局或静态的对象:后定义的先析构。
此外,局部的要优先调用,全局或静态的对象比局部晚一点调用。如果在局部定义静态的对象,则晚于局部,早于全局或静态。
总的来说就是:局部>局部中的静态>全局或静态。
说了这么多,大家可能会觉得比较乱,下面我们来举个例子就明白啦!
大家仔细分析一下析构函数的调用顺序就能看出规律啦!我就不过多赘述了。