读书人

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

发布时间: 2012-02-24 16:30:39 作者: rapoo

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

读书人网 >C++

热点推荐