2011-07-18 114 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