新的拋出例外: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中文網其他相關文章!