10.1、使用try和catch捕獲異常
try和catch是最重要的C++關鍵字。要捕獲語句可能引發的異常,可将它們放在try塊中,并使用catch塊對try塊可能引發的異常進行處理:
void somefunc()
{
try
{
int* pNumber=new int;
*pNumber=999;
delete pNumber;
}
catch(……) //catches all exceptions
{
cout<<"Exception in somefunc(),quitting"<<endl;
}
}
catch(……)捕獲未被其他catch塊顯示捕獲的所有異常。
自定義異常類應繼承std::exception,這讓你能夠重用捕獲std::exception異常的所有catch()塊
總結:編寫優秀的C++代碼
• 給變量指定(無論是對您還是其他人來說都)有意義的名稱。值得多花點時間給變量取個好名。
• 對于int、float等變量,務必進行初始化。
• 務必将指針初始化為NULL或有效的位址———如運算符new傳回的位址。
• 使用數組時,絕不要跨越其邊界。跨越數組邊界被稱為緩沖區溢出,可導緻安全漏洞。
• 不要使用C風格字元串(char*'),也不要使用strelen()和strcopy()等函數。std::string更安全,還提供了很多有用的方法,如擷取長度、進行複制和附加的方法。
• 僅當确定要包含的元素數時才使用靜态數組。如果不确定,應使用std::vector等動态數組。
• 聲明和定義接受非 POD 類型作為輸入的函數時,應考慮将參數聲明為引用,以免調用函數時執行不必要的複制步驟。
• 如果類包含原始指針成員,務必考慮如何在複制或指派時管理記憶體資源所有
權,即應考慮編寫複制構造函數和指派運算符。
• 編寫管理動态數組的實用類時,務必實作移動構造函數和移動指派運算符,以改善性能。
• 務必正确地使用const。理想情況下,get()函數不應修改類成員,是以應将其聲明為const函數。同樣,除非要修改函數參數包含的值,否則應将其聲明為const引用。
• 不要使用原始指針,而應盡可能使用合适的智能指針。
• 編寫實用類時,務必花精力實作讓它使用起來更容易的運算符。
• 在有選擇餘地的情況下,務必使用模闆而不是宏。模闆不但是通用的,還是類型安全的。