class XX
{
public:
static unsigned s_cnt;
XX()
{
++ s_cnt;
std::cout << "C XX " << s_cnt << "\n";
if (s_cnt > 2)
throw std::exception();
}
//private:
~XX()
{
std::cout << "~ XX\n";
}
};
unsigned XX::s_cnt = 0;
int main()
{
try
{
XX *xx = new XX[10];
} catch (...)
{
std::cout << "Exc\n";
}
}
輸出:爲什麼在數組創建過程中當未捕獲的異常拋出C++時調用析構函數?
C XX 1
C XX 2
C XX 3
~ XX
~ XX
Exc
但是,當我刪除的try-catch,我看到:
C XX 1
C XX 2
C XX 3
terminate called after throwing an instance of 'std::exception'
what(): std::exception
zsh: abort ./a.out
爲什麼C++調用在第一種情況下的析構函數,但不是在第二?
您可能會補充一點,原因是您不會在覈心轉儲中丟失狀態信息。 –
好點,補充。 –