C 中的新分配
在 C 中,當 new 運算子分配記憶體失敗時,會引發 std::bad_alloc 異常。然而,據報道,某些編譯器(例如 VC6)偏離了此標準。
VC6 行為
VC6 不遵守 C 標準,而是回傳 0(或 NULL) )當記憶體分配失敗時。這種不符合性可能會導致程式碼看起來不整潔,因為在每個新語句後都需要不斷檢查 NULL。
解決方案
Microsoft 在知識庫中承認了此問題基礎文章 KB276944。為了在 VC6 中解決這個問題,MSVC 允許連結自訂的新處理程序。在較新的 MSVC 編譯器(7.0 及更高版本)中,與 nothrownew.obj 物件檔案的連結提供與 VC6 相同的行為。
VS2005 及以上
MSVC 8.0 (VS2005 )引入了一項更改,預設情況下 new 現在一致引發 std::bad_alloc 。仍然可以使用 std::nothrow 參數指定傳回 0 的選項,如提供的程式碼範例中所示。這是一個向後相容的解決方案,允許程式碼與任何編譯器版本一起使用。
以上是與較新的編譯器相比,VC6 中 C 的記憶體分配有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!