作用
对象销毁前,做清理工作。
具体的清理工作,一般和构造函数对应
比如:如果在构造函数中,使用new分配了内存,就需在析构函数中用delete释放。
如果构造函数中没有申请资源(主要是内存资源),
那么很少使用析构函数。
函数名:
~类型名
没有返回值,没有参数
并且最多只能有一个析构函数
访问权限:
一般都使用public
使用方法:
不能主动调用。对象销毁时,会自动调用。
如果不定义,编译器会自动生成一个析构函数(但是什么也不做)
代码如下
#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>using namespace std;// 定义一个“人类”
class Human {
public:Human();Human(int age, int salary);Human(const Human&); //不定义拷贝构造函数,编译器会生成“合成的拷贝构造函数”Human& operator=(const Human&);~Human(); //析构函数//......private:string name = "Unknown";int age = 28;int salary;char* addr;
};Human::Human() {name = "无名氏";age = 18;salary = 30000;addr = new char[64];strcpy_s(addr, 64, "China");cout << "调用默认构造函数-" << this << endl;
}//......Human::~Human() {cout << "调用析构函数-" << this << endl; //用于打印测试信息delete addr;
}void test() {Human h1;{Human h2;}cout << "test()结束" << endl;
}int main(void) {test();system("pause");return 0;
}
在测试函数中,h2的使用范围就是大括号之内,所以运行完大括号内的语句之后,h2对象将需要被销毁,自动调用析构函数销毁了h2对象,释放了结尾为58的空间
h1的使用范围是整个测试函数,所以测试函数结束的时候,自动调用析构函数销毁了h1对象,释放了结尾是88的空间。