与构造函数不同,析构函数是为了确保已分配的值完全准备好释放其内存。析构函数是名为类名,无参数且无返回类型的成员函数。与构造函数相同的是,从不直接调用析构函数,而是在销毁值时隐式调用。下列情况下调用析构函数:
程序块结尾,为所有局部变量调用析构函数。
函数结尾,为参数调用析构函数。
语句结尾,为命名或匿名的局部变量调用析构函数。
删除动态分配的值时,回收内存前调用析构函数。
main函数终止时,为所有静态局部变量和全局变量调用析构函数。
删除对象变量时,为所有数据域调用析构函数。
删除派生类对象变量时,调用基类的析构函数。
有异常抛出且还有未执行的程序块时,为局部变量调用析构函数。
析构函数的功能是完成丢弃数值前所需要的内务处理任务。这包括释放动态分配的内存以避免内存泄漏,关闭文件或释放其他系统资源。如果没有析构函数,系统会自动生成默认析构函数。但它的函数体为空:不执行任何操作。几乎每个类都需要初始化,但只有当对象需要某种资源管理时才需要析构函数。定义如下:
类名::~类名()
{
语句
}
示例:String::~String()
{
delete[] buffer;
}