我不確定這是編譯器的問題還是如果我做錯了什麼。我正在使用Visual Studio 2013編譯器。作爲函數的構造函數嘗試塊 - 異常中止程序
我有一個類,我需要獲取我的構造函數初始值設定項列表中的大量資源,其中大部分資源可能會引發異常。我在函數try塊中包含了成員初始值設定項列表,並在那裏發現了異常。但即使catch子句不會重新拋出異常,我的程序仍會中止。我不允許發佈實際的代碼。所以我用這個等效的演示代碼重現了這個問題。有人可以幫我解決這個問題嗎?
#include <iostream>
using namespace std;
class A{
public:
A() try : i{ 0 }{ throw 5; }
catch (...){ cout << "Exception" << endl; }
private:
int i;
};
int main(){
A obj;
}
在執行此代碼時,我得到一個windows警報「abort()has called」。所以我想系統將這個視爲一個未捕獲的異常並調用terminate()。
另一方面,如果我在main()中將對象的構造包裝在try-catch塊中,那麼異常被正確捕獲並且程序正常結束。
有人可以告訴我,如果我在這裏做錯了什麼嗎?
看看http://www.gotw.ca/gotw/066.htm有關此問題的 –
的討論非常感謝Jan Herrmann。對於標準來說,如果不重新拋出異常,或者如果不從構造函數的try塊中拋出新的概念,那麼它將在catch塊的末尾自動重新生成。這現在非常有意義。也許正如建議pimpl成語是我應該開始使用。再次感謝 – Madhusudhan
*「我不允許發佈實際的代碼。所以我用這個等效的演示代碼重現了這個問題。「*您已經做出了非常好的[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder