生活中的对象都是被初始化后才上市的,这是对象的构造,比如手机出厂前都会有一个默认的出厂设置供客户使用,也会在销毁前做一些清理工作,这是对象的销毁,比如手机回收
一般而言,需要销毁的对象应该做清理
解决方案
为每个类都提供一个public的free函数
对象不再需要立即调用free函数进行清理
存在问题
free只是一个普通的函数,必须显示的调用,很容易忘记使用
对象销毁前没有做清理,很可能造成资源泄露
新方案
C++的类可以定义一个特殊的清理函数,叫做析构函数,它的功能与构造函数相反
定义:~ClassName()
析构函数没有参数也没有返回值类型声明(不能够重载)
析构函数在对象销毁时自动被调用
例子:
#include <stdio.h>
class Test
{
private:
int mi;
public:
Test(int i)
{
mi = i;
printf("the i is %d\n",mi);
}
~Test()
{
printf("the i=%d is destroy\n",mi);
}
};
int main(void)
{
Test t = 2;
Test *p = new Test(1);
delete(p);
return 0;
}
结果:
sice@sice:~$ g++ test.cpp
sice@sice:~$ ./a.out
the i is 2
the i is 1
the i=1 is destroy
the i=2 is destroy
一般来说,当类中自定义了构造函数,并且构造函数中使用了系统资源(内存申请,文件打开,socket通信),则需要自定义构造函数,析构函数其实是类中提供的特殊构造函数,它在对象销毁时自动被调用(遇到delete,return 0前),是对象释放系统资源的保障