首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于错误中断,为什么这个析构两次?

2012-02-24 
求助关于异常中断,为什么这个析构两次???#includeiostream.hclass CMyError{public:CMyError(){coutC

求助关于异常中断,为什么这个析构两次???
#include<iostream.h> 

class CMyError 

public: 
CMyError() 

cout<<"CMyError()"<<endl; 

CMyError(const CMyError &obj) 

cout<<"const CMyError &obj"<<endl; 

~CMyError() 

cout<<"~CMyError"<<endl; 

}; 

class CTest 

public: 
int Func(int i) 

if(i<10) 
throw CMyError(); 
if(i<20) 
throw -1; 
return i; 

}; 

void main() 

CTest test; 
int iIn; 
cin>>iIn; 
try 

test.Func(iIn); 
cout<<"at the end of try"<<endl; 

catch(CMyError e) 

cout<<"catch CError object"<<endl; 

catch(int i) 

cout<<"catch int variable:"<<i<<endl; 



搞不明白,为什么小于10时最后两次~CMyError,按说应该有两个对象才会两次析构,可是我找不到两个对象,一个应该是catch(CMyError e),另一个呢?

还有就是拷贝复制函数的作用。

[解决办法]

C/C++ code
int   Func(int   i)   {   if(i <10)   throw   CMyError();   //这个函数体内的对象在退出函数时析构if(i <20)   throw   -1;   return   i;   }   catch(CMyError   e)   //值传递后构造的对象,在CATCH语句结束后析构{   cout < <"catch   CError   object" < <endl;   } 

热点排行