成员函数的一种:(消亡前的善后工作)
1.名字与类名相同
2.在前面加“~”
3.没有参数和返回值
4.一个类最多只有一个析构函数
编译器自动生成缺省的析构函数且自动调用
观察调用析构函数的次数
析构函数的调用顺序:
#include<iostream>
using namespace std;
class demo{
int id;
public:
demo(int i){
id = i;
cout << "id =" << id << "constructed" << endl;
}
~demo(){
cout << "id =" << id << "destructed" << endl;
}
};
demo d1(1);
void func(){
static demo d2(2);
demo d3(3);
cout << "func" <<endl;
}
int main(){
demo d4(4);
d4 = 6;
cout << "main" << endl;
{
demo d5(5);
}
func();
cout << "main ends" << endl;
return 0;
}
由结果易知:
- d1是全局变量,最先声明,最后释放
- d4在main函数结束后释放,结果不显示在控制台中
- d4被赋值,临时对象申请后立即被释放
- d5声明以后作用域立即结束,所以紧接着释放
- 调用func,静态变量d2声明,在主函数结束时才会被释放
- d3在func函数结束时被释放
C++设计的一个思想:最先声明的最后被释放