C++ 我们可以使用构造函数重新显示异常吗?如果是,为什么?
我们能重新开始吗对您总是可以重新抛出捕获的异常,让调用堆栈中的高层人员也处理它,或者让它在未捕获时终止程序。构造函数中的异常意味着发生了非常糟糕的事情,而且由于构造函数不能返回无效值来指示正确的对象构造失败,有3个选项:以某种特殊状态初始化对象,希望调用方代码中的其他地方能够正确检查和处理该对象,或者设置外部变量/标志以标记初始化失败,或者在释放其动态分配的任何内存后引发异常。通常,如果在完全构造对象之前抛出异常,则将为迄今为止构造的任何成员对象调用析构函数。如果在发生异常时部分构造了一个对象数组,则只调用该数组构造对象的析构函数。此外,在捕获try块中发生的异常之前,会为try块中构造的每个自动对象调用析构函数。此代码甚至不会编译。ITYM a=X;b=Y;。那是打字错误,兄弟,目的不太清楚。“我不知道你在问什么。”罗斯·艾哈迈德,不客气。考虑投票并接受我的答案;C++ 我们可以使用构造函数重新显示异常吗?如果是,为什么?,c++,c++11,C++,C++11,我们能重新开始吗对您总是可以重新抛出捕获的异常,让调用堆栈中的高层人员也处理它,或者让它在未捕获时终止程序。构造函数中的异常意味着发生了非常糟糕的事情,而且由于构造函数不能返回无效值来指示正确的对象构造失败,有3个选项:以某种特殊状态初始化对象,希望调用方代码中的其他地方能够正确检查和处理该对象,或者设置外部变量/标志以标记初始化失败,或者在释放其动态分配的任何内存后引发异常。通常,如果在完全构造对象之前抛出异常,则将为迄今为止构造的任何成员对象调用析构函数。如果在发生异常时部分构造了一个对象数
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??
}
}
};