我有從C++類的構造(英特爾庫)一些C代碼的接口malloc的在C++構造
class A{
A{
x = ippiMalloc();
if(x==NULL) ...
}
}
在構造malloc函數(Intel版本)被使用。如果ippiMalloc函數沒有成功,那麼處理它的正確方法是什麼。拋出異常?
我有從C++類的構造(英特爾庫)一些C代碼的接口malloc的在C++構造
class A{
A{
x = ippiMalloc();
if(x==NULL) ...
}
}
在構造malloc函數(Intel版本)被使用。如果ippiMalloc函數沒有成功,那麼處理它的正確方法是什麼。拋出異常?
是,一個異常很可能是在這裏處理錯誤的最佳方式 - 至少這將是最乾淨的方式。這也是「新」運營商在失敗時所要做的。
如果您的應用程序也不例外知道比你有問題。在這種情況下,該類的工廠方法可能有意義。
static A * create() { ... }
在這裏,您可以將其封裝到一個非異常程序中,如果您無法創建該對象,則可能返回null。
然後,如果您的應用程序不是return-null意識,您只是引入問題而不是刪除它們。 – MSalters 2010-10-11 12:19:57
如果您的應用程序不是異常意識到它/必須/正在檢查返回值。您確實沒有其他選項:例外和/或返回值。 – 2010-10-11 12:55:16
首先,給構造函數添加圓括號:) 是的,我會投擲拋出異常,因爲替代方法不是很愉快,就像在object_state_is_not類中設置一些bool類似的東西。
加入了以前的答案 - 和here是爲什麼例外是在構造函數中處理錯誤的最好方式一個很好的解釋。 (C++ FAQ Lite)
這是哪個庫? – rkellerm 2010-10-10 11:45:26
Ippi(Integrated Performance Primitives) – Ross 2010-10-10 11:49:31
如果您不熟悉這一點,請注意以下事項:如果您需要擁有所有權語義的第三方智能指針(可能爲'shared_ptr'),則使用該指針代替原始指針。否則,A應該是專門用於管理'x'分配和釋放的類。這不只是空想「的關注點分離是個好習慣」:這是令人驚訝的尷尬寫異常安全的類,它是負責管理一個以上的資源,有點繁瑣,即使只有一個... – 2010-10-10 13:10:30