Effective C++筆記 —— 第四章

  1. 讓接口容易被正確使用,不容易被誤用
  2. 設計一個新的class要考慮的問題:
    2.1 新type如何被創建和銷燬——構造函數和析構函數以及內存分配函數和釋放函數
    2.2 對象的初始化和賦值該有什麼樣的差別——構造函數和賦值運算符
    2.3 對象如果被以值傳遞會發生什麼——拷貝構造函數
    2.4 什麼是新type的合法值
    2.5 新type需要配合某個繼承圖系嗎?
    2.6 新type需要什麼樣的轉換嗎?
    2.7 什麼樣的操作符和函數對此type是合理的
    2.8 什麼樣的標準函數應該駁回——聲明爲private
    2.9 誰該取用新type的成員
    2.10 什麼是新type的未聲明接口
    2.11 新type有多麼一般化
  3. 用const引用代替以值傳遞
    3.1 提高效率,避免了很多拷貝構造函數的使用
    3.2 按引用傳遞可以避免對象切割問題,只有引用和指針纔有多態
    3.3 對於內置類型和STL的迭代器和函數對象,按值傳遞效率更高
  4. 將成員變量聲明爲private。從封裝的角度看,只有兩種訪問權限:private和其他。protected並不比public更具有封裝性
  5. 愈少代碼可以看到數據,愈多的數據可以被封裝,所以一個non-member non-friend 函數比member函數有更大的封裝性
  6. 將所有便利函數放在多個頭文件內但隸屬同一個命名空間,意味着客戶可以輕鬆擴展這一組便利函數,只需要添加更多non-member non-friend函數到此命名空間內
  7. 如果需要爲所有參數進行類型轉換,那麼這個函數必須是non-member
  8. 可以避免friend就該避免
  9. C++只允許對class template偏特化,在function template上偏特化是行不通的
  10. 當std::swap對新type效率不高時,提供一個swap成員函數,並確定這個函數不拋出異常
    10.1 如果提供一個member swap,也應該提供一個non-member swap來調用前者。對於classes(而非templates),需要特化std::swap
    10.2 調用swap時應針對std::swap使用using聲明式,然後調用swap並且不帶任何“命令空間資格修飾”
    10.3 爲“用戶定義類型”進行std templates全特化是好的,但千萬不要嘗試在std內加入某些對std而言全新的東西
  11. 全特化和偏特化待補充……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章