当对象消亡或者使用delete的时候,会调用析构函数
说明:
1)析构函数没有返回值
2)析构函数不能用private修饰
3)析构函数函数名与类名一致,其前加上~符号与构造进行区别. eg: ~Human();
4)析构函数没有形参
5)修构函数不需要人为调用(普通形式自动调用 指针形式需要delete调用)
6)一般用在构造函数有申请资源动作,那么实现析构函数对其资源释放.
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
class Human
{
char * name;
int age;
public:
Human(char *name, int age); //构造函数:完成对象的初始化
~Human(); //析构函数名称固定,和类名一样,前面多了一个'~'
//构造函数是没有返回值的
//析构函数只能是public的权限
//~Human(char *name, int age); //析构函数是不可以重载且不能有参数的
void get_info();
};
/*
Human::Human(char *h_name, int h_age){
cout << "构造函数" << endl;
name = h_name;
age = h_age;
}
*/
//构造函数快速赋值 函数:成员名(参数名)
Human::Human(char *h_name, int h_age):name(h_name),age(h_age){
cout << "构造函数" << endl;
}
void Human::get_info(){
cout << "name: " << name << " age: " << age << endl;
}
Human::~Human(){
name = (char *)"Peter";
age = 10;
cout << "析构函数" << endl;
}
int main(int argc, char const *argv[])
{
Human human1((char *)"Tom", 25);
sleep(1);
Human *human2 = new Human((char *) "Tom", 25);
delete human2;
//human1.Human((char *)"Peter", 10); //构造函数是不可以手动调用的
human1.get_info();
human1.~Human(); //析构函数可以手动调用,但是不需要手动调用的
human1.get_info();
return 0;
}