
🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”

析构函数
概念
析构函数,与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的,而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
类似于我们之前经常用到的Deatroy()函数。
特性
析构函数是特殊的成员函数,其特征如下:
- 析构函数名是在类名前加上字符~
 - 无参数无返回值类型
 - 一个类只能有一个析构函数,若未显式定义,系统会自动生成默认的析构函数,注意,析构函数不能重载(因为没有参数)
 - 对象生命周期结束时,C++编译系统自动调用析构函数。
 
typedef int DataType;
class Stack
{
public:
	Stack(size_t capacity = 3)
	{
		_array = (DataType*)malloc(sizeof(DataType) * capacity);
		if (_array == NULL)
		{
			perror("malloc fail");
			return;
		}
		_capacity = capacity;
		_size = 0;
	}
	void Push(DataType data)
	{
		_array[_size] = data;
		_size++;
	}
	~Stack()
	{
		if (_array)
		{
			free(_array);
			_array = NULL;
			_capacity = 0;
			_size = 0;
		}
	}
private:
	int _capacity;
	int _size;
	DataType* _array;
};
void TestStack()
{
	Stack s;
	s.Push(1);
	s.Push(2);
}
int main()
{
	TestStack();
	return 0;
} 
5. 关于编译器自动生成的析构函数,是否会完成一些事情呢?下面的程序我们会看到,编译器自动生成的默认析构函数,对自定义类型调用它的析构函数。
class Time
{
public:
	~Time()
	{
		cout << "~Time()" << endl;
	}
private:
	int _hour;
	int _minute;
	int _second;
};
class Date
{
private:
	// 基本类型(内置类型)
	int _year = 1970;
	int _month = 1;
	int _day = 1;
	// 自定义类型
	Time _t;
};
int main()
{
	Date d;
	return 0;
}
 
 
你看,这个特征是不是和构造函数特别像。
总结:
有资源需要显示清理,就需要写析构,如:stack,list
有两种场景不需要显示写析构,默认生成就可以。
1.没有资源需要清理,如Date
2. 内置类型成员没有资源需要清理,剩下的都是自定义类型成员,如MyQueue


![【Linux】-网络请求和下载、端口[6]](https://img-blog.csdnimg.cn/direct/dae88422d4074db2b78e246cd6f5e0cf.png)


















