一、析构函数的定义
~类名(){} 例子: ~Student(){ }
2.析构函数没有返回值,没有参数
3.对象结束的时候自动调用析构函数
4.析构函数的作用是用于释放[堆空间]
5.析构函数不可以重载
6.执行前先执行构造函数,执行后即将消失时再执行析构函数
7.若在主函数中,则析构函数在主函数结束时再调用,因为此时对象的作用域是主函数全部,此时打印就不会打印析构里的东西,只会在return 0 ; (结束函数的作用)后再打印
二、知识拓展和总结
malloc不会触发构造函数,new会 free不会触发析构函数,delete会
拓展知识:内联函数是以空间换时间 运行效率高了,所以内联函数代码量不宜太多;
形式:static inline void function(int a){;}
三、代码展示
#include <iostream>
#include <cstring>
using namespace std;
class PRO
{
public:
PRO(const char *name); //构造函数声明
~PRO()
{
cout<<"~PRO"<<endl;
cout<<"释放前~this->name="<<this->name<<endl;
delete []this->name;
this->name =NULL;
cout<<"释放后~this->name="<<this->name<<"\n"; //没有值
}
//析构函数,无返回值,无参数
//释放堆空间
private:
char *name;
};
PRO::PRO(const char *name)
{
cout<<"PRO"<<endl;
//this->name =name; 方法错误,会修改this->name的地址
this->name = new char[100]; //100块大小
strcpy(this->name,name);
cout<<this->name<<endl;
}
int main(int argc, char const *argv[])
{
//创建栈对象
PRO pro("jack");
// PRO *st = new PRO;//申请了一块
// delete st;
// st = NULL;
return 0;
}
结果
PS C:\Users\newuser\Desktop\C++\第四天C++> g++ .\X析构函数.cpp
PS C:\Users\newuser\Desktop\C++\第四天C++> ./a
PRO
jack
~PRO
释放前~this->name=jack
释放后~this->name=
PS C:\Users\newus