我正在處理MFC應用程序的大型老化代碼庫。隨着時間的推移,許多開發人員一直在研究這些代碼,因此,在處理新分配失敗的可能性的代碼中,我們有三種不同的方法。執行沒有鏈接到MFC項目的mfc的C++靜態庫throw bad_alloc或CMemoryException *?
第一種方法是在新的結果上測試NULL。我們不使用nothrownew.obj,所以這顯然是一個需要清理的錯誤。
其次是捕捉CMemoryException *(是的,C++異常在編譯器中啓用)。據我所知,MFC覆蓋了新的標準運算符,而是拋出這個東西。我相當肯定,第二種方法在MFC應用程序本身中是正確的。 MFC覆蓋新的,其奇怪的CMemoryException引發版本。
最後一個來自我們的人,他們擅長使用C++,但不是MFC程序員。他們正在捕獲const std :: bad_alloc &。
我真的不知道的是鏈接到應用程序的靜態庫的期望。這是絕大多數使用bad_alloc的代碼。假設這些庫不是用MFC或ATL編譯的,而是僅用標準C++編寫的,他們是否可以捕獲bad_alloc?或者,他們鏈接的應用程序中是否存在MFC,並使用全局新運算符感染它們,並使其嘗試在錯誤的分配模擬中乾淨地失敗?
如果你有答案,你能解釋這是如何工作的,或者指出我正確的參考來解決這個問題嗎?
謝謝!我們鏈接到標準的C++運行庫作爲DLL,這意味着每個人都有MFC異常。不幸的是,這個應用程序的主要目標之一是沒有虛擬內存的系統,所以需要進行分配檢查,呃。 – 2008-10-17 22:56:06