求助关于异常中断,为什么这个析构两次???
#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),另一个呢?
还有就是拷贝复制函数的作用。
[解决办法]
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; }