我在项目中看见析构函数的语法,有点不明白,如下代码所示,
class Person{
public:
Person();//默认构造函数
~Person();//析构函数
private:
std::string name;
int age;
};
析构函数就是以~开头的,我参考了网上资料,搬运到此。
析构函数(destructor)是一种成员函数,但是他的作用与构造函数相反,用来在系统释放对象前做一些清理工作,如利用delete运算符释放临时分配的内存,清零某些内存单元等。当一个对象生命周期结束时候,系统会自动调用该对象所属类的析构函数。构造函数的名称与类名相同,而析构函数的名称必须在类名前面加上“~”符号,需要注意的是构造函数和析构函数不能指定任何返回值类型,包括void返回类型。
程序中定义了一些用new分配的空间、全局变量、static分配的空间等,在执行到析构函数时候释放,其中new分配的空间需要用delete释放,其他空间默认释放掉。看下面的代码,
class A{
private:
char *data;
public:
A()
{
data = new char[100];
};
~A()
{
delete[] data;
}
};
我们这样使用定义的类A,
A a;//调用默认构造函数
上面的语句定义了A类型对象a,a中将new100个char,当a这个变量消亡的时候,将自动执行~A()析构函数,释放空间。
析构函数只是给你提供一种机制,让你可以去释放内存、清除指针,但是实际的内容需要你自己去添加,例如上面的析构函数如果像下面一样写法,
~A()
{
//什么也不做
}
那么析构函数执行的时候也不会释放内存、清除指针,所以可以将析构函数理解为为程序员预留的释放接口。