1. 对象的销毁
(1)对象的销毁
-
生活中的对象都是被初始化后才上市的(从而引入了构造函数)
-
生活中的对象被销毁前会做一些清理工作
(2)问题:C++中如何清理需要销毁的对象?
-
一般而言,需要销毁的对象都应该做清理
-
解决方案:
-
为每个类都提供一个public的free函数
-
对象不再需要时立即调用free函数进行清理
-
class Test { int *p; public: Test() { p = new int; } void free() { delete p; }; };
- 存在的问题:
-
free只是一个普通的函数,必须显示的调用
-
对象销毁前没有做清理工作,很可能造成资源泄露
-
2. 析构函数
(1)C++的类中可以定义一个特殊的清理函数,叫析构函数
(2)析构函数的功能与构造函数相反
(3)定义:~ClassName(); //注意,无参无返回值;对象销毁时会被自动调用
【编程实验】析构函数的使用初探 22-1.cpp
#include <stdio.h> class Test { private: int mi; public: Test(int i) { mi = i; printf("Test(): %d ", mi); } //析构函数 ~Test() { printf("~Test(): %d ", mi); } }; int main() { Test t(1); Test* pt = new Test(2); delete pt; return 0; }
运行结果:
//Test(): 1
//Test(): 2
//~Test(): 2
//~Test(): 1
2. 析构函数的定义准则
当类中自定义了构造函数,并且构造函数中使用了系统资源(如:内存申请、文件打开等),则需要自定义析构函数
3. 小结
(1)析构函数是对象销毁时进行清理的特殊函数
(2)析构函数在对象销毁时自动被调用
(3)析构函数是对象释放系统资源的保障