13.1.5 析构函数
析构函数也是一种特殊的成员函数,用来释放类中申请的内存或在退出前设置某些变量的值。当类对象离开它所在的作用范围,或者释放一个指向类对象的指针时,系统就会自动调用析构函数。析构函数不是必须的,主要用于释放互斥锁,或者释放内存,或者类对象不再使用时需要执行的特殊操作。
析构函数的函数名和类名相同,并且在前面加上一个"~"。该函数没有任何参数,不返回任何值,声明格式如下:
- ~<函数名>();
在代码实现时,析构函数的定义方式与普通成员函数相同。
注意:析构函数可能会在程序的许多退出点被调用,所以尽量不要将它定义为内联函数,否则会导致程序代码的膨胀,降低程序执行效率。
【示例13-10】 演示析构函数的使用和定义方式。
- class exam
- {
- private:
- char *str;
- public:
- exam ();
- ~ exam ();
- void show();
- };
- exam:: exam ()
- {
- str=new char[10];
- str[0]='h';
- str[1]='i';
- str[2]='\0';
- }
- void exam::show()
- {
- cout<<str<<endl;
- }
- exam::~ exam ()
- {
- cout<<"析构函数!"<<endl;
- delete[] str;
- }
- int main()
- {
- exam s1;
- s1.show();
- cout<<"退出"<<endl;
- return 0;
- }
程序运行结果如下:
- hi
- 退出
- 析构函数!
分析:程序中声明了一个构造函数和一个析构函数,在构造函数内为属性str申请了10个字节的内存,并初始化。在退出程序前自动调用了类的析构函数,释放了为str申请的内存。
【责任编辑:
云霞 TEL:(010)68476606】