c++ -- 析构函数

1、析构函数形式:
~类名()
{

}
无参数,无返回值,故不能被重载,只能有一个
2、作用:释放类对象占用的资源(不能释放动态分配的资源 如用 new 申请的资源)

当一个变量超出自己的作用域时占用的资源会被释放,同样,动态分配的资源在此时是不被释放的
必须手动的释放,否则会造成内存泄露
如:
string *p ;
{
string *q = new string("hello")
p = q ;
}//在这里当遇到右花括号,会释放他所在块申请的资源,但动态分配的无法释放
cout<<*p<<endl ; 
输出结果为:hello

同样析构函数也无法释放对象中动态申请的资源
如

 1 class node
 2 {
 3     public:
 4 
 5     int a,b;
 6     node()
 7     {
 8        *p = "hello" ;
 9         a = 0 ;
10         b = 0 ;
11     }
12     ~node()
13     {
14         cout<<"this is destruct\n" ;
15         //delete p ;
16     }
17 
18 };
19 
20 int main()
21 {
22     string *q ; 
23     
24    {
25       node a ; 
26       q = a.p ;
27    }
28    
29    cout<<"q is "<<*q<<endl ; 
30 
31 }
输出结果:hello

但是如果加上delete,就会出错了。

3、合成析构函数:
无论我们自己是否为类编写析构函数,编译器都会合成一个析构函数,用于释放
资源,而我们的自己的析构函数只是在释放对象是做些想做的操作(书上这么说的
虽然我感觉不是这样,当然可以理解为只有我们自己的析构函数执行操作并释放资源
),所以释放对象的时候先执行我们自己的析构函数,再执行合成的析构函数。

4.析构函数撤销对象的顺序:
无论是类对象之间,还是类对象内部的数据成员,析构函数都是按照声明顺序的逆序
释放资源
*/

  

posted @ 2015-06-09 11:17  Szz  阅读(383)  评论(0编辑  收藏  举报