如何处理从本地静态对象的构造函数中抛出的异常?例如我已经以下代码:本地静态对象和异常
class A
{
public:
A() {throw runtime_error("Ooops");}
};
void foo()
{
static A a = A();
cout << "Continue" << endl;
}
int main(void)
{
try
{
foo();
}
catch(...)
{
}
foo(); // Prints continue
return 0;
}
据我所知,在第二呼叫foo
方法的情况下,对象a
被视为完全构造对象,构造不被调用。 (更多结束,它似乎是由于第一次异常抛出不被称为a
的析构函数)
不,您的理解不正确。你可以尝试一下[trivially](https://wandbox.org/permlink/0zqV3BglWpVZSgRM)。 –
如果抛出异常并终止构造函数的执行(未完成构造对象),您如何期望'a'完全构造? – Rogus
'静态A a = A();'你为什么这样做?为什么要复制初始化? –