2011-01-30 47 views

回答

6

C++中的壞new將拋出一個異常(除非你使用std ::拋出異常),指針不會被分配,這樣它會不管它是被做了new調用之前。

但是,您可能會對this article感興趣,其中談到強制new如您在問題中提到的那樣在失敗時返回null。

0

當一個異常被拋出,疊層被展開(運行本地對象的析構函數),直到停止catch除外。沒有任何東西會自動將指針設置爲NULL,並且其中一個析構函數可以這麼做 - 這可能是一個人爲的例子。

通常情況下,沒有必要將指針設置爲NULL。事實上,你通常不能。看看下面的代碼:

try { 
    std::string s("hello, world"); 
} catch (std::bad_alloc) { 
// ??? 
} 

這有可能是這12個字節的分配失敗。異常將從std::string的構造函數返回。在這一點上,對象s已不存在,也沒有指針s._SomeInternalNames。如果您嘗試在catch塊中使用s,編譯器會報告錯誤。如果指針不存在了,你顯然不能將它設置爲0.

相關問題