大多數人抱怨異常。然後他們接著抱怨說,如果物件失敗,異常是唯一可以進行錯誤檢查的方法,讓他們感覺是被強加的。這也許是“最好”的方法,但絕對不是唯一的方法。其中最流行的方法之一是兩步構造。
1 2 3 4 5 6
|
class Example
{
Example();
bool Create();
bool bOkay;
};
|
我個人認為這違反直覺。不過沒關係,它被應用在我們甚至可能想使用異常的地方,比如公司程式碼。你經常會遇到這樣的問題:“它在其他方面有好處嗎?”或者“有沒有任何時候我更願意這樣做,而不是一步構造?”。這兩個問題的答案我都不知道。“Create”不允許對建構函式初始化列表進行最佳化,而建構函式本身可以。它總是有基本函式開銷,因為呼叫次數更多。有人可能會爭辯說,異常造成的開銷大於兩步建構函式造成的開銷。這是一個有效的論點。在丟擲異常時,異常確實非常消耗資源。但是,我相信異常的好處大於成本。我實際上並不知道,我從來沒有費心去計算週期或進行基準測試。
我知道,這很棒。但在 C 語言中,經常有宏來包裝 API 函式,比如“APICHECK(myAPIFunction(structBlahblahblah));”。這在 SFML 中的 OpenGL 和 C 語言中的其他各個領域都有使用。