首頁 > 後端開發 > C++ > 您的 C 編譯器是否正確處理'new”運算符異常?

您的 C 編譯器是否正確處理'new”運算符異常?

Linda Hamilton
發布: 2024-11-19 05:33:02
原創
837 人瀏覽過

Does Your C   Compiler Correctly Handle `new` Operator Exceptions?

新的拋出例外:C 標準合規性檢查

C 標準要求new 運算子在下列情況下拋出std: :bad_alloc 異常:記憶體分配失敗。然而,人們對某些編譯器(尤其是 VC6)在這方面的行為表示擔憂。

VC6:打破標準

證實了謠言,VC6 表現出非- 合規行為。當遇到分配失敗時,它不會拋出異常,而是傳回 0(或 NULL)值。這種與標準的偏差給開發人員帶來了潛在的挑戰,因為它需要在每次新呼叫後進行顯式空檢查,從而導致程式碼美觀問題。

VC6 的自訂解決方法

為了緩解 VC6 中的此問題,Microsoft 提供了一種涉及自訂新處理程序的解決方法。此解決方案透過異常處理補充了預設行為。

較新 MSVC 編譯器中的變數行為

在 7.0 版本及以上的 MSVC 編譯器中,new 的行為更為複雜。這些編譯器可能會根據特定規則預設拋出或不拋出行為,包括與 nothrownew.obj 物件檔案的連結。

MSVC 8.0 及以後的一致性

隨著MSVC 8.0(VS2005)的發布,採用了更一致的方法。此編譯器始終預設拋出新異常,除非明確連結到 nothrownew.obj。

使用std::nothrow 實作非拋出行為

開發人員可以明確要求新的異常回傳0 而不是使用std::nothrow 參數拋出異常。這允許向後相容為 VC6 行為編寫的現有程式碼。

透過了解這些細微差別並實施適當的解決方法,開發人員可以確保他們的 C 程式碼遵守標準,無論他們使用什麼編譯器。

以上是您的 C 編譯器是否正確處理'new”運算符異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板