1.析构函数,比构造函数多一个~和构造函数一样,没有返回值
2.析构函数总是无参的,不能重载
3.语法上允许多次调用析构函数,且什么时候释放什么时候调用析构函数
4.在用类类型开辟内存空间时,Malloc free 不会调用析构函数,而new delete 会调用
例子如下
#include<iostream>
using namespace std;
class People //简单定义了一个类,为了简洁,我把其成员函数的定义放在文章最后,其成员函数的功能只是简单的输出对象的地址
{
int age;
public:
void show_age();
People(int n);
People();
~People();
};
int main()
{
People* p = new People;
People a(5);
People b(6);
a.show_age(); //成员函数
delete p; //会发现在delete之后就调用析构函数输出了
b.show_age(); //成员函数
return 0;
而如果使用c中的malloc
People* p = (People*)malloc(sizeof People);
free(p);// 如果使用malloc开辟空间,释放时不会调用析构函数
还有一些特性,关于释放顺序
// 先创建的后释放
People p[5];
p[0].~People();//可以人为调析构函数,但是在销毁时系统还是会调用析构函数
p[0].~People();
delete[] p;
return 0;
}
成员函数在这里,有兴趣的可以复制代码,看看析构函数释放时释放的顺序
People::People(int n)
{
this->age = n;
}
People::People()
{
this->age = 0;
cout << this << endl;
}
People::~People()
{
cout << this << endl;
}
void People::show_age()
{
cout << this <<" "<< age << endl;
}
萌新学习中,如有不对之处,请多多指教!