抛出异常的异常

时间:2013-03-22 13:11:32

标签: c++ exception

当玩C ++中的异常时,我注意到一种奇怪的行为,我希望有人在这里解释。请看下面的代码:

class Foo
{
public:

    Foo()
    {
        throw 0;
    }
};

class RandomException
{
public:

    Foo f;
};

void bar()
{
    throw RandomException();
}

// Case #1
int main()
{
    bar();
    return 0;
}

在上面的例子中,我有一个未处理的异常。现在,如果我将main函数的主体更改为:

// Case #2
int main()
{
    try
    {
        bar();
    }
    catch (int)
    {
    }

    return 0;
}

我吞下了这个例外。没有未处理的异常,代码运行正常。如果我将代码更改为:

// Case #3
int main()
{
    try
    {
        bar();
    }
    catch (RandomException&)
    {
    }

    return 0;
}

现在我又有一个未处理的例外。

我想知道为什么在案例#2中我没有未处理的异常,在案例#3中我做了,即使在这两种情况下我都抛出2个异常,一个int和一个类型{ {1}}。

如果在抛出异常时抛出异常,C ++如何处理事情?

1 个答案:

答案 0 :(得分:4)

这里,RandomException对象的构造失败并出现异常,因此throw RandomException()永远不会完成,并且抛出int(0)(在构造{{1}的过程中}})。

如果你有一个处理程序(如#2),控制权将转移到该处理程序。如果不是(如#3),将调用RandomException