常量定義優先使用 const 或 enum,函數宏改用 inline 函數,避免宏的副作用與作用域問題。類內常量需在類外定義(如 const int Class::LIST_NUM;)。
new/delete 會調用構造/析構函數,malloc/free 僅管理原始記憶體。配對使用:delete ptr 對應單一對象,delete[] ptr 對應陣列。
含指針成員的類必須實現深拷貝,否則預設淺拷貝導致雙重釋放或記憶體洩漏。若確定不需要拷貝,可將兩者聲明為 private 且不實現。
const 成員與引用成員只能初始化不能賦值;初始化列表避免預設構造後再賦值的雙重開銷;static 成員不在列表中初始化。
透過基類指針刪除派生對象時,若基類析構非虛函數,派生類析構不會被調用,造成資源洩漏。作為基類時必須聲明虛析構函數。
派生類賦值運算符需顯式調用基類 operator=(使用 static_cast<Base&>(*this) = rhs;),並處理自身指針成員的深拷貝。
介面僅包含函數,避免暴露數據成員;每個函數功能單一無重疊;友元函數屬於介面一部分,需謹慎使用。
需支援隱式類型轉換的雙參數運算(如 operator*)應為非成員函數;需訪問私有成員的非成員函數才設為友元;虛函數必須是成員函數。
const 修飾指針/引用/返回值/成員函數,區分位元級與邏輯級常量性;僅 const 不同的成員函數可重載(如 operator[])。
避免構造/析構開銷與切割問題;內建類型(如 int)傳值更高效。
new 指針引用