C++中的析构函数
目录
一、什么是析构函数:
二、析构函数的特性:
一、什么是析构函数:
C++中的析构函数非常简单,它的功能无非是帮助我们自动归还堆区的空间给操作系统。当我们使用内存开辟函数(如malloc()、realloc())等,如果忘记使用free()函数归还所开辟的空间,在有些时候就可能造成内存泄漏(比如调用一个函数去开辟空间,结果没有将空间释放,出了函数之后,指向所开辟空间的指针找不到了,这块空间也就找不到了,引发了内存泄漏)。
所以为了避免这种情况,C++中提供了析构函数,同样我们如果不创建,编译器会自动生成,当对象销毁时,编译器会自动效用该函数,完成对象中资源清理的工作,来帮助我们归还所动态开辟的空间。
二、析构函数的特性:
1、析构函数完成对象中资源清理的工作,并不是销毁对象。
2、析构函数是在类名前面加上字符“~”。
3、析构函数无参数、无返回值、无返回值类型。
4、一个类只能有一个析构函数,若未定义,则编译器会自动生成一个析构函数。
5、对象生命周期结束后,C++编译器系统自动调用析构函数。
6、析构函数不构成函数重载。
//析构函数
class Date
{
public:
Date(int year = 1970, int month = 1, int day = 1)
{
_year = year, _month = month, _day = day;
}
void Print()
{
printf("%d/%d/%d\n", _year, _month, _day);
}
~Date()
{
cout << "~Date()" << endl;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d;
d.Print();//打印结果为:1970/1/1
return 0;
}
析构函数的功能是清理资源,日期类里面其实没有资源需要清理,一般自定义类型的析构函数(比如栈)里面有动态开辟的资源需要清理。析构函数特点是后定义的对象先析构,对于内置类型成员编译器不会处理,自定义类型成员会调用这个成员的析构函数。