C++ : 类的简单介绍(四)——析构函数

C++ : 类的简单介绍(四)——析构函数_第1张图片

概念:

与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。

而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

特征:

1. 析构函数名是在类名前加上字符 ~

 2. 无参数无返回值类型。

3. 一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。

注意:析构 函数不能重载

4. 对象生命周期结束时,C++编译系统系统自动调用析构函数

5.编译器默认生成的析构函数和构造函数一样,不会处理内置类型,对于自定义类型会去它们的内部调用它们的析构函数

6.如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数

析构函数的功能类似于 栈、链表、队列的distroy的功能,用来进行内部空间的清理和释放,而于这些数据结构的distory 功能不同,在有了析构函数栈之后,这些数据结构,就不需要再写distorty 因为析构函数会在这是变量结束后自动进入清理模式 

使用析构函数的对比:

使用前

C++ : 类的简单介绍(四)——析构函数_第2张图片

使用后

C++ : 类的简单介绍(四)——析构函数_第3张图片

后进先出:

C++ : 类的简单介绍(四)——析构函数_第4张图片 

如上图代码所示,析构函数会先将后面定义的函数进行释放,这就是后进先出 

class Date
{
public:
	Date(int year = 1)
	{
		_year = year;
	}

	~Date()
	{
		cout << "~Date()->"<<_year<< endl;
	}

private:
	// 基本类型(内置类型)
	int _year;
	int _month;
	int _day;
};



void func()
{
	Date d3(3);
	static Date d4(4);//静态的
}

Date d5(5);

static  Date d6(6);//静态的


// 局部对象(后定义先析构) -》 局部的静态 -》全局对象(后定义先析构)
int main()
{
	Date d1(1);
	Date d2(2);
	func();

	return 0;
}

 局部对象(后定义先析构) -> 局部的静态 ->全局对象(后定义先析构) 

C++ : 类的简单介绍(四)——析构函数_第5张图片


C++ : 类的简单介绍(四)——析构函数_第6张图片

你可能感兴趣的:(C++,c++初阶知识,C++,类,c++,开发语言,析构函数)