1. 析构函数和构造函数类似,是c++规定当对象的生命周期结束时,默认你会调用析构函数。
?2. 同理,当我们不写析构函数的时候,编译器会自动生成一个空实现的析构函数。
?3. 析构函数只能编译器自己调用,我们不能调用。(无论是不是自己写的)
? ??
我们在析构函数中主要是在对象的生命周期结束时,释放一些内存(例如堆区的内存)。?当然,如果没有内存需要释放,那就可以写一个空实现的,或者不需要写(编译器会加一个)。
class Human {
public:
Human();
~Human();
private:
int age;
char* name;
};
Human::Human() {
age = 18;
name = new char;
}
Human::~Human() {
delete name;
}
注意:? 1. 析构函数不能有参数,也就说明析构函数只能有一个不能进行函数重载?
? ? ? ? ? 2. 析构函数是在默认构造函数前面加一个~?
? ? ? ? ? 3. 代码中类内有两个成员变量? --? age 和 name,age是局部变量其生命周期由编译器管理,而name是一个指针,我们为它在堆区开辟了内存,所以需要在对象生命周期结束的时候,释放掉。(这就在析构函数中实现了)?
? ? ? ? ?4. 对于上面的代码,如果只有age吗,那析构函数就可以写成一个空实现?
class Human {
public:
Human();
~Human();
private:
int age;
char* name;
};
Human::Human() {
age = 18;
name = new char;
cout << __FUNCTION__ << endl;
}
Human::~Human() {
delete name;
cout << __FUNCTION__ << endl;
}
void test() {
Human man;
}
int main(void) {
test();
system("pause");
return 0;
}
?1. 在创建对象的时候,会调用构造函数,对象声明周期结束,调用析构函数-- 使用代码来验证。?
?2. __FUNCTION__是一个宏,使用在函数中表示,此函数的名字。?
?3. 对象也是变量,代码中man对象的生命周期为定义-->test函数结束。
结果:??
?可以看出,先调用构造创建,再调用析构结束