1. 定义
“~<类名>”
没有参数和返回值类型的成员函数。
2. 调用
当对象消亡时,在系统收回它所占的存储空间之前,它的析构函数会自动被调用。
一般清空下不需要定义析构函数,但是,如果对象在创建后申请了一些资源并且没有归还这些资源,就要定义析构函数在对象消亡前归还这些资源。
如果类中为提供析构函数,编译程序会在需要时隐式提供一个析构函数,该析构函数负责调用成员对象类和基类的析构函数。
class A()
{
char *str;
public:
A()
{
str=NULL;
}
A(const char *p)
{
str = new char(strlen(p)+1);
strcpy(str,p);
}
~A()
{
delete []str;
str = NULL;
}
}
当包含成员对象的对象消亡时,先调用本身类的析构函数,本身类的析构函数的函数体执行完毕后,再调用成员函数对象类的析构函数(在继承中,先调用和执行自己的析构函数,然后调用成员对象类的析构函数,最后调用基类的析构函数)。如果有多个成员对象,则成员对象析构函数的调用次序与它们定义的次序正好相反。