如何處理從本地靜態對象的構造函數中拋出的異常?例如我已經以下代碼:本地靜態對象和異常
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();'你爲什麼這樣做?爲什麼要複製初始化? –