首頁  >  文章  >  後端開發  >  在 C 中 `new` 總是拋出 `std::bad_alloc` 嗎?

在 C 中 `new` 總是拋出 `std::bad_alloc` 嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-17 08:50:03557瀏覽

Does `new` Always Throw `std::bad_alloc` in C  ?

真正的異常:超出C 記憶體管理規格

與C 標準相反,據報道,某些編譯器,例如VC6,偏離了new 分配記憶體失敗時傳回std::bad_alloc 異常的預期行為。

通常,當 new 無法取得請求的記憶體時,它會觸發 std::bad_alloc 異常,遵循既定規則C標準。然而,對於 VC6,採取了另一種方法。

據報導,VC6 在記憶體分配失敗時傳回 0(或 NULL),而不是傳回異常。這種行為與標準不同,可能會導致程式碼混亂和意外結果。

為了解決這個問題,Microsoft 引入了一個自訂的新處理程序作為建議的解決方案。然而,在 Visual C 7.0 和 7.1(VS2002 和 VS2003)中,一組複雜的規則決定了 new 是否以不拋出或拋出的方式運作。

隨著 Visual C 8.0 (VS2005) 的發布,微軟透過執行一致的政策解決了這個問題。在此版本中,new 始終預設拋出異常,除非明確與 nothrownew.obj 物件檔案連結。

對於使用為 VC6 設計的舊程式碼的開發人員,可以利用 std::nothrow 參數模仿該編譯器中 new 的行為。透過指定 new(std::nothrow),可以機械地更改程式碼,使其在不同的編譯器中具有類似的功能,因此無需徹底修改現有的錯誤處理機制。

以上是在 C 中 `new` 總是拋出 `std::bad_alloc` 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn