// malloc 版:手動 sizeof、強制轉型、無型別檢查
int* p1 = (int*)malloc(sizeof(int) * length);
// new 版:內建 sizeof、型別安全、自動呼叫建構函數
int* p2 = new int[length];
對非內建型別,new **同時完成分配與初始化** (呼叫建構函數)。
class Obj {
public:
Obj(); // 預設
Obj(int x); // 參數化
};
Obj* a = new Obj; // 呼叫 Obj()
Obj* b = new Obj(1); // 呼叫 Obj(1),初值為 1
Obj* objects = new Obj[100]; // ✅ 僅能呼叫預設建構函數
// Obj* objects = new Obj[100](1); // ❌ 語法非法,無法指定參數
delete [] objects; // ✅ 正確:逐一呼叫 100 個解構函數
delete objects; // ❌ 錯誤:相當於 delete objects[0],漏掉 99 個 → 記憶體洩漏 + 資源未釋放
「越怕指針,越要用指針。不會正確用指針,絕非合格程式設計師。」
「養成『逐步除錯追蹤』習慣,唯有此法能見問題本質。」
作者親歷:首個專案 1 萬行 C 碼**零指針** (全用陣列硬繞),後重寫代碼量減半。指針是 C/C++ 靈魂,**直面恐懼、刻意練習、工具加持**,方能馭之。