【发布时间】:2012-10-25 20:45:12
【问题描述】:
这个问题的灵感来自Using an object after it's destructor is called
让我们考虑下面的代码
class B
{
public:
B() { cout << "Constructor B() " << endl; }
~B() { cout << "Destructor ~B() " << endl; }
};
class A {
public:
B ob;
A()
try
{
throw 4;
}
catch(...)
{
cout << "Catch in A()\n";
}
A(int)
{
try
{
throw 4;
}
catch(...)
{
cout << "Catch in A(int)\n";
}
}
};
int main()
{
try
{
A f;
}
catch (...)
{
cout << "Catch in main()\n\n";
}
A g(1);
}
它的输出是
Constructor B()
Destructor ~B()
Catch in A()
Catch in main()
Constructor B()
Catch in A(int)
Destructor ~B()
与A(int) 相比,构造函数A() 具有初始化列表try/catch 语法。为什么这对子对象销毁的顺序有影响?为什么A() 中抛出的异常会传播到main()?
【问题讨论】: