class A
{
int a,b;
public:
A(int X,int Y)
{
X = a;
Y = b;
try
{
if (b == 0)
throw b;
else
cout << a / b;
}
catch (int a)
{
cout << a; //throw;can we rethrow??then what is purpose of it??
}
}
};
“我们能重投吗?” -是的。 你总是可以重新抛出一个捕获的异常,让调用堆栈中更高的人也来处理它(或者让它在没有捕获的情况下终止程序)。
构造函数中的异常意味着发生了非常糟糕的事情,并且由于构造函数不能返回(无效)值来指示正确的对象构造失败,因此有3种选择:在某种特殊状态下初始化对象,希望在调用者代码的其他地方可以正确地检查和处理该对象,或者设置外部变量/标志来标记初始化失败,或者在释放动态分配的任何内存后抛出异常。 通常情况下,如果在对象完全构造之前抛出异常,那么将为迄今为止已经构造的任何成员对象调用析构函数。 如果发生异常时对象数组已经部分构造,则只调用数组构造对象的析构函数。 此外,在捕获try块中发生的异常之前,为该块中构造的每个自动对象调用析构函数。