在C++中throw;
在catch塊中執行時,會在塊之外重新拋出當前捕獲的異常。如果扔了會發生什麼;語句在catch塊之外執行?
在this answer異常調度的想法使用複雜的異常處理時,往往就被當作一個解決方案來減少重複代碼:
try {
CodeThatMightThrow();
} catch(...) {
ExceptionHandler();
}
void ExceptionHandler()
{
try {
throw;
} catch(FileException* e) {
//do handling with some complex logic
delete e;
} catch(GenericException* e) {
//do handling with other complex logic
delete e;
}
}
投擲指針或值不作任何區別所以它的出的問題。
如果ExceptionHandler()不是從catch塊中調用會發生什麼?
我想這個代碼VC7:
int main(int, char**)
{
try {
throw;
} catch(...) {
MessageBox(0, "", "", 0);
}
return 0;
}
首先,它使得調試器指示第一次機會異常,然後立即未處理的異常。如果我在調試器外部運行此代碼,程序崩潰的方式與調用abort()相同。
這種情況下的預期行爲是什麼?
刪除了「windows」標籤,因爲這與Windows沒有任何關係(但IS是一個很好的問題)。 – 2009-06-11 15:23:01