在 C++ 中,构造函数 用来做一些 类 的初始化工作,而且是系统自动调用,同样,在类被销毁时,系统还提供了一个析构函数,用来做一些清理工作,比如释放分配的内存、关闭打开的文件等,同样,析构函数,也是系统自动调用。
析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个 ~ 符号。
析构函数没有 参数,不能被 重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。
一个类只有一个析构函数,且析构函数没有返回值,没有参数。
~Destructor() { }
析构函数的前面一定要加 ~,并且是系统自动调用的。
系统自动调用析构函数
#include <iostream>
using namespace std;
class Student
{
public:
Student(string name, int age):m_name(name), m_age(age)
{
}
void sayHello()
{
cout << "I am " << m_name << " and i am " << m_age << " years old!" << endl;
}
~Student()
{
cout << "Call ~Student" << endl;
}
private:
string m_name;
int m_age;
};
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
Student stu("HaiCoder", 109);
stu.sayHello();
Student stu1("Jobs", 57);
stu1.sayHello();
return 0;
}
程序运行后,控制台输出如下:
我们定义了一个析构函数,我们可以看到,我们程序结束时,系统自动为我们调用了析构函数,并不需要我们手动调用析构函数。
析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个 ~ 符号。
析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。