int* p = new int; // 未初始化
int* p = new int(); // 值初始化為 0
int* p = new int(1024); // 直接初始化
delete p; // 釋放
p = nullptr; // 防懸空指針
int* arr = new int[10]; // 10 個未初始化 int
int* arr = new int[10](); // 10 個 0
delete[] arr; // 必須用 delete[]
arr = nullptr;
錯誤:delete arr(漏掉 [])會導致未定義行為(通常只析構首元素,內存洩漏)。
string* ps = new string; // 默認構造
string* ps = new string("hi"); // 參數構造
string* ps = new string[5]; // 5 個空字符串
delete ps; // 單對象
delete[] ps; // 數組
new 失敗拋出 std::bad_alloc。可用 nothrow 版本:
int* p = new (nothrow) int[1000000000];
if (!p) { /* 處理失敗 */ }
unique_ptr p(new int(42)); // 獨占所有權
shared_ptr p = make_shared(); // 共享所有權
// 自動釋放,無需手動 delete
char buf[sizeof(MyClass)];
MyClass* p = new (buf) MyClass(); // 在預分配緩衝區構造
p->~MyClass(); // 手動調用析構,不釋放內存
new 配對 delete,new[] 配對 delete[]。nullptr。