天天看點

C++學習系列筆記(九)

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引用。

• 不要使用原始指針,而應盡可能使用合适的智能指針。

• 編寫實用類時,務必花精力實作讓它使用起來更容易的運算符。

• 在有選擇餘地的情況下,務必使用模闆而不是宏。模闆不但是通用的,還是類型安全的。

繼續閱讀