2011-07-18 8 views
8

なぜstd :: bad_exceptionをキャッチした後にクラッシュするのですか? (私はVC7を使用しています)例外をキャッチした後にクラッシュする

#include "stdafx.h" 
#include <exception> 

int validateInt (int x) throw (int,std::bad_exception) { 
    if (0 == x) { 
     throw std::bad_exception("x"); 
    } 
    return x; 
} 

class C { 
    int i;  
public: 
    C(int); 
}; 

C::C(int ii) 
try : i(validateInt(ii)) { 
    std::cout << "I'm in constructor function body\n"; 
} catch (std::exception& e) { 
    std::cout << "I caught an exception...\n"; 
} 

int _tmain(int argc, _TCHAR* argv[]) { 
    C a(0); 
    return 0; 
} 
+1

これはどのようにしてコンパイルされましたか? –

+3

どういう意味ですか?構造体の初期化リストを囲むtry-catchブロックは、合法的なC++です。 – anonymvs

+2

うわー。私はそれが使われているのを見たことがないし、それについて聞いたこともありません。 –

答えて

12

コンストラクタの初期化リストからの例外を止めることはできません。あなたがそれをキャッチした後、それは自動的に再スローされます。 (手つかずの例外があるためにクラッシュします)

これは良いことです。メンバーを正しく初期化できない場合、クラスが正しく存在しない可能性があります。

+0

私は "C a(0);" try-catchブロックでは大丈夫でした。しかし、私はそれが大丈夫ではないと思った。 – anonymvs

関連する問題