本文参照于狄泰软件学院,唐佐林老师的——《C++深度剖析教程》
既然有对象的创建,那么必然就需要有对象的销毁了。而对象在销毁前需要做一些清理工作。如吧内存释放。
问题:C++中如何清理需要销毁的对象。
我们提供解决方案:为每个类都提供一个public的free函数;在对象不再需要时立即调用free函数进行清理。
但是这个方法却不好,因为free只是一个普通的函数,必须显式的调用。如果当我们忘记调用这个函数时,则很可能造成资源泄漏。
因此,C++编译器为我们提供了一个能够自动调用的特殊函数进行对象的清理,我们称作析构函数。
1. C++的类中可以定义一个特殊的清理函数,叫做析构函数。
2. 析构函数的功能与构造函数相反
3. 定义:~ClassName()
4. 析构函数没有参数也没有返回值类型声明
5. 析构函数在对象销毁时自动被调用。
示例代码:析构函数使用初探
#include
class Test
{
int mi;
public:
Test(int i)
{
mi = i;
printf("Test(): %d\n", mi);
}
~Test()
{
printf("~Test(): %d\n", mi);
}
};
int main()
{
Test t(1);
Test* pt = new Test(2);
delete pt;
return 0;
}
输出结果:
Test(): 1
Test(): 2
~Test(): 2
~Test(): 1
从输出结果可以知道:
对象是根据作用域范围而销毁的。而堆对象则需要显示调用delete关键字显示销毁。