析构函数是作用于对象的销毁工作,清空对象所占有的堆区内存析构函数实在释放对象的时候自动调用,栈区对象自动释放,堆区对象需要手动释放delete才会调用析构函数。没实现析构函数的时候,编译器会自动实现默认的析构函数,里面什么也不做。
析构函数特点:
· 没有返回值 ~类名(){}
· 函数名称与类名相同,但是前面要有~
· 析构函数不可以有参数,因此不可以发生重载
· 编译器在对象销毁前会自动调用析构函数,不需要手动调用
#include<iostream>
using namespace std;
class people
{
public:
int* p = nullptr;
people()
{
cout << "调用了构造函数" << endl;
p = new int(3);//p指向四个字节的堆区内存,内存中存放的是3.
}
//当对象被销毁时编译器会自动调用析构函数
~people
{
cout << "调用了析构函数" << endl;
//当我们在类中声明了一些指针变量时,我们一般就在析构函数中进行释放空间
//因为系统并不会释放指针变量指向的空间,我们需要自己来delete,而这个delete一般就写在析构函 数中
if(p)
{
delete(p);
p = nullptr;
}
}
};
int main()
{
{
people(1);//出了作用域后,会自动释放p,自动调用析构函数
}
people* p1 = new people();//new先调用malloc再调用构造函数
delete p1;//先调用析构再调用free
}