首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Effective C++ 核心條款精華筆記整理

     編輯:關於C++

資源管理與類設計

條款1:以 const、enum、inline 替換 #define

常量定義優先使用 const 或 enum,函數宏改用 inline 函數,避免宏的副作用與作用域問題。類內常量需在類外定義(如 const int Class::LIST_NUM;)。

條款3:盡量用 new/delete 替換 malloc/free

new/delete 會調用構造/析構函數,malloc/free 僅管理原始記憶體。配對使用:delete ptr 對應單一對象,delete[] ptr 對應陣列。

條款11:自定義拷貝構造函數與賦值運算符

含指針成員的類必須實現深拷貝,否則預設淺拷貝導致雙重釋放或記憶體洩漏。若確定不需要拷貝,可將兩者聲明為 private 且不實現。

條款12:優先使用成員初始化列表

const 成員與引用成員只能初始化不能賦值;初始化列表避免預設構造後再賦值的雙重開銷;static 成員不在列表中初始化。

條款14:基類析構函數應為 virtual

透過基類指針刪除派生對象時,若基類析構非虛函數,派生類析構不會被調用,造成資源洩漏。作為基類時必須聲明虛析構函數。

運算符與函數設計

條款16:operator= 處理所有數據成員與基類部分

派生類賦值運算符需顯式調用基類 operator=(使用 static_cast<Base&>(*this) = rhs;),並處理自身指針成員的深拷貝。

條款18:介面設計完整且最小化

介面僅包含函數,避免暴露數據成員;每個函數功能單一無重疊;友元函數屬於介面一部分,需謹慎使用。

條款19:區分成員、非成員與友元函數

需支援隱式類型轉換的雙參數運算(如 operator*)應為非成員函數;需訪問私有成員的非成員函數才設為友元;虛函數必須是成員函數。

條款21:盡可能使用 const

const 修飾指針/引用/返回值/成員函數,區分位元級與邏輯級常量性;僅 const 不同的成員函數可重載(如 operator[])。

條款22:優先傳引用而非傳值

避免構造/析構開銷與切割問題;內建類型(如 int)傳值更高效。

其他重要條款

  • 條款24:缺省參數適用於單一演算法且有合理預設值,否則用重載
  • 條款26:警惕隱式轉換導致的二義性
  • 條款31:絕不返回局部對象引用或 new 指針引用
  • 條款32:延遲變量定義至最近使用處並直接初始化
  • 條款37:決不重新定義繼承而來的非虛函數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved