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

求助关于异常中断,为什么这个析构两次???#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;   }