// 配置單一物件
int* p1 = new int;
Obj* obj = new Obj(10); // 呼叫建構子
// 配置陣列
int* arr = new int[100];
Obj* objs = new Obj[100]; // 僅呼叫無參建構子
sizeof、型別轉換、型別安全檢查。
delete [] objs; // 正確:逐一呼叫解構子
delete objs; // 錯誤:相當於 delete objs[0],其餘 99 個物件解構子不被呼叫 → 記憶體洩漏/資源外洩
class Obj {
public: Obj(); Obj(int x); // 多載建構子
};
Obj* a = new Obj; // Obj()
Obj* b = new Obj(1); // Obj(1)
陣列 只能 使用無參建構子:new Obj[100](1) 編譯錯誤。
new 有對應 delete,new[] 對應 delete[]。delete 觸發解構子。unique_ptr, shared_ptr)優於手動管理。