new 分配動態內存(堆),delete 釋放。必須配對使用,否則內存洩漏。new 返回指針,delete 接受指針。
int *arr = new int[n]; // 分配 n 個 int // 使用 arr[0]...arr[n-1] delete[] arr; // 必須用 delete[]
數組長度可在運行時決定,釋放時需加 []。
struct Node { int val; Node* next; };
Node* p = new Node; // 分配單個對象
p->val = 10;
delete p; // 無 []
構造函數自動調用,delete 調用析構函數。
int* p = new int; *p = 42; double* pd = new double; *pd = 3.14; delete p; delete pd;
| 類型 | 分配 | 釋放 | 備註 |
|---|---|---|---|
| 數組 | new T[n] | delete[] p | 需知道大小 |
| 單個對象 | new T | delete p | 調用構造/析構 |
| 基本類型 | new int | delete p | 無構造函數 |
delete[] 用 delete 刪數組 → 未定義行為。優先使用 std::vector, std::unique_ptr, std::shared_ptr 管理生命週期,避免手動 new/delete。