定义: 当一个对象的生命周期结束时,系统会自动调用一个成员函数,它没有返回值,没有参数,不能重载,这个函
数就是析构函数。是特殊的成员函数。
函数名是类名前面加上一个“~”符号,功能与构造函数相反。
调用析构函数的次序正好与调用构造函数的次序相反。
特征:
1、在类名加上字符~
2、无参数,无返回值
3、一个类只有一个析构函数(所以不能重载)
4、对象生命周期结束时,系统会自动调用析构函数
5、注意:析构函数体内并不是删除对象,而是做一些清理工作。
对于对象生命周期结束的几种情况:
①如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前
自动执行析构函数。
②static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束或调用exit函数结束
程序时,才调用static局部对象的析构函数。
③如果定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全 局对
象的析构函数。
④如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
析构函数的作用
在撤销对象占用的内存空间之前完成一些清理工作,使这部分内存空间可以分配给新的对象使用。
举例:
class A
{
public:
A()
{
p = new char[10];
}
~A()
{
cout<<" ~A() "<<endl;
delete []p;
p=NULL;
}
void display()
{
cout<<"disp"<<endl;
}
private:
char *p;
};
//测试
void main()
{
A a;
a.~A();
a.display();
}
实际上,析构函数除了释放资源的作用外,还可以用来执行“用户希望在最后一次使用对象后的一些操作”。