C++進階之三:類型安全和STL

  • 不要動態地處理數組

這裏主要有兩個意思:數組

  1. 不用支持動態地基類的指針進行++、+n這種操做,由於它實際會按基類大小進行偏移計算,而非預期地按照子類的大小進行偏移計算;

2.儘可能在接口中使用引用而非指針,緣由就在於指望清楚地表面所討論的是一個對象,而不是對象數組;安全

  • 不要使用失效對象

常常容易忽略的失效對象包括:架構

  1. 語義失效對象:指向已刪除對象的虛懸(dangling)指針
  2. 失效的迭代器:好比,在迭代器所指向的容器開始插入以後的vector<T>::iterator i
  • 不要使用不安全的C語言的遺留函數:
    strcpy\sprintf 的緩衝區都沒有檢查範圍;strncpy\snprintf 雖然檢查緩衝區界限,可是到達緩衝區界限時卻不添加null。所以都是不安全的ide

  • 不要使用可變長參數(...)
    C++ 中可變長參數的缺點包括:函數

    1. 缺少類型安全性。 省略號本質是告訴編譯器:關閉全部的檢查,今後由我接管,啓動reinterpret_cast
    2. 調用者和被調用者存在緊密耦合;
    3. 類類型對象的行爲沒有定義;
    4. 參數的數量未知
  • 不要使用聯合從新解釋表示方式
    好比一個聯合中有一個long 類型的成員和一個指針類型的成員,給指針賦值,而後經過long讀取其地址,這樣會有問題:指針

    1. 不一樣架構和編譯器中sizeof(long)可能不等於sizeof (char *)
    2. 減小了代碼的可讀性;
  • 不要用memcpy 複製對象、不用用memcmp 比較對象
    編譯器會在多態對象中嵌入一些隱藏數據(所謂的虛擬函數表指針vptr),使用虛擬繼承的時候,大部分編譯器實現會添加更多內部指針。通常使用中,由編譯器負責管理全部這些隱藏數據。對象

相關文章
相關標籤/搜索