sizeofnew int(100)、new int[10]{}delete[]int* p = new int[10]; // 配置
delete[] p; // 釋放
int* q = new int(42); // 單物件帶初值
delete q;
現代建議:優先使用智慧指標 (std::unique_ptr, std::shared_ptr) 與容器 (std::vector, std::string),避免裸指標。
// 巨集缺陷:abs(i++) 展開為 ((i++) < 0 ? -(i++) : (i++)) 雙重副作用
#define ABS(x) ((x) < 0 ? -(x) : (x))
// inline 無副作用、型別安全、可除錯
inline int Abs(int x) { return x < 0 ? -x : x; }
編譯器會視情況內展,保留函數語意優勢。
void Draw(int x, int y); // 座標繪圖
void Draw(const char* text); // 文字繪圖
void Draw(const Rect& r); // 矩形繪圖
減少命名認知負擔 (DrawText, DrawRect…),配合預設參數更靈活。
// C 風格
void Increment(int* p) { (*p)++; }
// C++ 風格
void Increment(int& r) { r++; } // 呼叫端:Increment(val); 更直觀
參考即別名,語意清晰,避免空指標解參風險。
void Log(const char* msg, int level = 0, const char* tag = "APP");
判斷「用函數」還是「用類別」的經驗法則:
static 區域變數例:滑鼠驅動各子程序無共享資料 → 函數集;圖形物件 (資料) + 縮放/平移/旋轉 (操作) → 類別。
早期 C++ Builder 透過模板提供型別安全容器:
typedef BI_StackAsVector IntStack;
IntStack stk;
for (int i=0; i<10; ++i) stk.push(i);
while (!stk.empty()) cout << stk.pop() << ' ';
現代替代:std::stack<int>, std::vector, std::list 等 STL 容器,標準化、無廠商鎖定、效能經實戰驗證。
善用語言特性,寫出的 C++ 代碼比同功能 C 代碼更安全、更易維護、效能不遜色。