Sea*_*ull 12 c++ exception-handling exception try-catch in-class-initialization
我们认为可能会发生初始化异常.所以我们编写try/catch块.
int f(){
throw 1;
}
class A
{
public:
A() try : _k(f())
{}
catch (int)
{
std::cout << "Exception 1" << std::endl;
}
private:
int _k;
};
Run Code Online (Sandbox Code Playgroud)
但是这个问题在一个层面上重新排除了异常.这意味着下一个代码
try
{
A a;
} catch(int)
{
std::cout << "Exception 2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
将输出:
Exception 1
Exception 2
Run Code Online (Sandbox Code Playgroud)
为什么这个try/catch块的行为与普通的try/catch块不同?
完整代码示例:http://ideone.com/XjY2d
Die*_*ühl 16
看来你的问题是:为什么函数级try/catch会自动重新抛出exceptoin?通过从对象的构造中抛出异常,该对象在生命出现之前就被认为已经死亡.它的所有子对象都被销毁了.也就是说,如果在构造期间抛出异常则没有对象.如果异常不会抛出,你就会得到一个物体的船体.这显然是不可取的.
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |