提问者:小点点

我们可以使用构造函数重新引发异常吗?如果可以,那么为什么?


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??
        }
    }
};

共2个答案

匿名用户

“我们能重投吗?” -是的。 你总是可以重新抛出一个捕获的异常,让调用堆栈中更高的人也来处理它(或者让它在没有捕获的情况下终止程序)。

匿名用户

构造函数中的异常意味着发生了非常糟糕的事情,并且由于构造函数不能返回(无效)值来指示正确的对象构造失败,因此有3种选择:在某种特殊状态下初始化对象,希望在调用者代码的其他地方可以正确地检查和处理该对象,或者设置外部变量/标志来标记初始化失败,或者在释放动态分配的任何内存后抛出异常。 通常情况下,如果在对象完全构造之前抛出异常,那么将为迄今为止已经构造的任何成员对象调用析构函数。 如果发生异常时对象数组已经部分构造,则只调用数组构造对象的析构函数。 此外,在捕获try块中发生的异常之前,为该块中构造的每个自动对象调用析构函数。