2011-09-17 42 views
2

我剛學過,如果內存分配不成功,您可能會拋出或處理異常。但在這裏,我還沒有看到很多人在使用newoperator時處理異常。分配內存時出現異常

例如:下列程序中的任何一點可能不會失敗嗎?

char* c = new char[1000]; 
delete []c; 

你應該如何處理異常?

回答

2

大多數人沒有明確處理bad_alloc異常的原因是因爲大多數時候,大多數用戶應用程序可以從低內存條件恢復,因此讓異常向外傳播是最明智的事情去做。如果您可以執行明智的恢復操作,則只應明確地捕獲異常。

在某些情況下,捕獲std::bad_alloc異常是有意義的,例如,如果在分配大塊內存失敗時程序可以嘗試另一種方法。這僅適用於某些系統;在過度使用內存的系統中,推測性地分配大塊內存並期望std::bad_alloc將失敗。

明確地捕獲bad_alloc以便清理通常表示資源未被適當的RAII風格類實例管理,該風格類應該在析構函數中進行正確的清理,以確保它在每次作用域時都會發生無論是通過任何例外還是以其他方式。

3

拋出異常std::bad_alloc你應該使用,的try-catch塊捕獲它:

try 
{ 
    char* c = new char[1000]; 
} 
catch(std::bad_alloc &except) 
{ 

} 

的基本方針我遵循的例外是:
處理異常時您可以並且如果您可以從異常中恢復,請採取必要的措施從中恢復,如果您不能,則只需通過記錄適當的診斷來終止應用程序/程序。

在內存分配失敗的情況下,應用程序/程序通常不能繼續或恢復。因此,通過記錄某些診斷消息退出或通過允許異常向上傳播來使其崩潰。