【发布时间】:2013-11-10 07:34:12
【问题描述】:
为什么A类的构造函数抛出的以下异常会被两次捕获,第一次是构造函数本身的catch,第二次是main函数中的catch?
为什么构造函数中的 catch 不只捕获一次?
#include <iostream>
using namespace std;
class E {
public:
const char* error;
E(const char* arg) : error(arg) { }
};
class A {
public:
int i;
A() try : i(0) {
throw E("Exception thrown in A()");
}
catch (E& e) {
cout << e.error << endl;
}
};
int main() {
try {
A x;
}
catch(...)
{
cout << "Exception caught" << endl;
}
}
如果我删除 main 函数中的 try-catch 块,程序将崩溃。 这是输出:
Exception thrown in A()
terminate called after throwing an instance of 'E'
zsh: abort (core dumped) ./main
为什么在 main 函数中没有 try-catch 块会崩溃?
【问题讨论】:
-
另外,如果你把
tryinside 构造函数的主体,你会捕获一个异常。 -
@MM。是的,这是为什么呢?如果没有 main 中的 try-catch 块,它就不会再崩溃了。
-
请不要抓住省略号...正确并抓住适当的异常。
-
您最好使用
const引用来捕获异常。 -
因为你通常不想在投掷/接球后改变它们,如果你需要创建一个新副本并重新投掷这个。
标签: c++ exception exception-handling constructor try-catch