析构函数是一种特殊的成员函数 他的作用于构造函数相反 当生命期结束时会自动执行析构函数
特点:
1、如果一个函数中定义了一个对象(自动局部对象)当这个函数被调用结束时,对象应该释放 在对象释放前自动自行析构函数
2、static局部对象在函数调用结束时对象并不释放 因此不会调用析构函数 只有在main函数结束或者exit函数结束程序是 才能调用static局部对象的析构函数
3、如果定义了一个全局变量 则在程序的流程离开其作用域时(exit) 调用全局变量的析构函数
4、如果new运算符动态建立了一个对象 当delete运算符释放该对象时 先调用该对象的析构函数
作用:
析构函数的作用并不是删除对象 而是撤销对象占用的内存之前完成的一些清理工作 使这部分对象可以被程序分配给的新的对象使用
实际上 析构函数的作用并不仅限于释放资源方面 还可以被用来执行“用户希望最后一次使用对象之后执行的任何操作”,例如输入输出有关信息 这里的用户是指类的设计者 ,因为 ,析构函数实在声明类的时候定义的 也就是说 析构函数可以完成类的设计者所指定的任何操作
一般情况 类的设计者应当在声明类的同时 定义析构函数 一指定如何完成清理工作 C++会在你不定义析构函数的时候自动生成一个析构函数
什么时候用析构函数 ??
1、在全局反违中定义的对象 他的构造函数文件中的所有函数执行前调用 如果一个程序有多个文件 而不同的文件中都定义了全局变量 则这些对象的构造函数执行顺序都不确定时 (看倒叙)
2、如果定义的是局部自动对象 则在建立对象时调用构造函数 如果函数被多次调用 则在每次建立对象时都要调用构造函数 在函数调用结束、对象释放时 先调用析构函数
3、如果在函数中定义静态局部对象 则只在程序第一次调用此函数建立对象时调用构造函数一次 在调用结束时对象并不释放 不调用析构函数