指標操作是 C/C++ 開發的核心難點。本文整理九大常見問題,涵蓋 delete 語意、new/delete 與 malloc/free 混用風險、陣列配置釋放、delete this 條件、多維陣列配置、限制物件只能動態配置等實務技巧。
delete p 刪除的是指向的資料,非指標本身。free() 不能釋放 new 記憶體,delete 不能釋放 malloc() 記憶體。new 優勢:呼叫建構子、型別安全、可被類別覆寫(operator new)。realloc 對應:realloc 以 bitwise 複製會破壞 C++ 物件語意。new T[n] 對應 delete[] p,漏寫 [] 會導致堆積損毀。delete this 條件:物件必須由 new 配置、為最後一次呼叫、事後不得存取 this。private,提供 static 工廠函式回傳 new 物件。
class Fred {
public:
static Fred* create() { return new Fred(); }
static Fred* create(int i) { return new Fred(i); }
private:
Fred(); Fred(int); Fred(const Fred&);
virtual ~Fred();
};
int main() { Fred* p = Fred::create(5); delete p; }
掌握這些細節,能有效避免記憶體洩漏、雙重釋放、存取已釋放記憶體等經典錯誤。