一、什么析构函数
析构函数就是对象被释放的时候被调用的函数。它的本质是回调函数。
什么时候对象会被释放?比如,main执行完退出的时候,delete一个对象指针的时候…
析构函数的特点是,不带返回值,也不带参数。
二、实验
实验一:析构函数的定义方法
//cat.hpp
class cat
{
public:
string name;
int age;
bool male;
cat(){this->name = "wawa";};
cat(string name, int age, bool male);
~cat(); //析构函数的声明
void get_up();
void eat();
void sleep();
void play();
};
//cat.cpp
cat::~cat()
{
cout << "deconstruct " << name << endl;
}
//main.cpp
#include<iostream>
#include "cat.hpp"
int main(void)
{
cat Cat1;
Cat1.get_up();
Cat1.eat();
Cat1.play();
Cat1.sleep();
return 0;
}
实验结果
实验二:释放class指针指向的内存
int main(void)
{
cat *Cat1 = new cat("haha", 5, 0);
Cat1->get_up();
Cat1->eat();
Cat1->play();
Cat1->sleep();
delete Cat1;
return 0;
}
实验结果
释放class指针指向的内存必须使用delete,否则不会调用析构函数,意味着没有真正被释放。
再补充一点,在许多项目中,通常都会动态地创建对象。
原因很简单,一个类中可能包含了很多变量或方法,以静态的方式创建,那么,它创建之后,会占用很多栈空间。而栈空间的大小远远比堆空间要小得多。可能会出现栈溢出情况。
三、最后
析构函数在外形上比构造函数多了一个“~”,这样能很形象地告诉我们,析构函数对于构造函数来说作用是相反的。
最后,析构函数没有重载函数,因为析构函数不带参数。