一 概述
析构函数与构造函数相反,构造函数用于构造一个对象,析构函数则用于在对象被销毁后清除它所占用的内存空间,比如说它可以清除由构造函数创建的内存.
- 析构函数就是在构造函数的前面加一个波浪号(~),用于区别于构造函数
- 另外我们要注意的是析构函数跟构造函数一样不能有返回值
- 析构函数还不能有参数
- 一个类只有一个析构函数,无论你以什么形式来重载析构函数,都会导致出错
二 代码及结果
2.1 代码一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include<iostream> using namespace std; class A {
public: A(){cout<<"构造函数执行完毕!"<<endl;} ~A(){cout<<"析构函数执行完毕!"<<endl;}
}; int main() { A a; return 0;
}
|
2.2 代码结构二
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<iostream> using namespace std; class A {
public: A(); ~A(); }; A::A() {cout << "构造函数执行完毕!" << endl;} A::~A() {cout << "析构函数执行完毕!" << endl;} int main() { A a; return 0; }
|
2.3 结果
2.4 说明
- 每个对象在创建时都会自动调用该类的构造函数,这里调用了我们自定义的构造函数。在该函数中我们让它输出一条证明自己在工作的信息,所以输出了"构造函数执行完毕"
- 右大括号表示整个程序结束,对象a的声明也自然终止,这时编辑器会自动调用该类的默认析构函数来释放掉该对象所占的内存,而由于我们在第七行的析构函数里也加入了一条信息,因此程序结束前也会输出一条证明析构函数在工作的信息
- 构造函数用来创建一个对象
- 析构函数用来销毁一个对象