作用
对象销毁前,做清理工作。
具体的清理工作,一般和构造函数对应
比如:如果在构造函数中,使用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的空间。
标签:析构,20,函数,int,C++,Human,include,构造函数 From: https://blog.csdn.net/m0_57667919/article/details/142033651