首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ new/delete 與動態內存管理完整指南

     編輯:關於C++

單對象分配與釋放

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;    // 數組

異常安全與 bad_alloc

new 失敗拋出 std::bad_alloc。可用 nothrow 版本:

int* p = new (nothrow) int[1000000000];
if (!p) { /* 處理失敗 */ }

智能指針替代裸指針 (C++11)

unique_ptr p(new int(42));        // 獨占所有權
shared_ptr p = make_shared(); // 共享所有權
// 自動釋放,無需手動 delete

定位 new (Placement New)

char buf[sizeof(MyClass)];
MyClass* p = new (buf) MyClass(); // 在預分配緩衝區構造
p->~MyClass(); // 手動調用析構,不釋放內存

總結核心規則

  1. new 配對 delete,new[] 配對 delete[]。
  2. 釋放後立即置 nullptr。
  3. 優先使用智能指針 / 容器避免手動管理。
  4. 類需遵循「三/五法則」管理動態資源。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved