1、new/delete c++具備申請/釋放堆記憶體功能的運算子。
相當於c語言中的malloc和free
new 型別:會自動計算型別所需要的位元組數,然後從堆中分配對應位元組數的記憶體,返回記憶體的首位址(具備型別的指標)
delete 指標:會自動釋放記憶體
注意:new/delete 與malloc/free不能混用,因為 new和delete會自動呼叫類、結構的建構函式、析構函式。
陣列的分配與釋放
new 型別[n]; n表示陣列的長度,如果是類、結構會自動呼叫n次建構函式
delete 指標;通過 new分配的記憶體必須通過delete釋放
new 返回值前4個位元組中存放在陣列的長度。
3、重複釋放
delete/delete不能重複釋放同一塊記憶體。
delete/delete釋放野指標的後果不確定,但釋放空指標是安全的。
4、記憶體分配失敗
當分配的記憶體過大,沒有能需求的整塊記憶體就會丟擲異常std::bad_alloc。
C 中記憶體管理
1 分配方式簡介 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。堆,就是那些由n...
C 中基本的記憶體管理
c 記憶體管理 operator new 與 operator delete函式 new delete 原理 棧 非靜態區域性變數,函式引數,返回值等,棧是向下增長的 記憶體對映段 裝載乙個共享的動態記憶體庫 堆 用於程式執行時動態記憶體分配,可以向上增長 資料段 儲存全域性變數和靜態資料 段 可執...
C 中vector容器的記憶體管理
vector是類模板,某種程度上可以看做是陣列的公升級版,但建立後仍可以改變大小。甚至 c primer 第4版 中還有這樣子的說法 從技術上說,在原來為空的vector容器上n次呼叫push back函式,從而建立擁有n個元素的vector容器,其執行時間永遠不能超過n的常量倍。大家也可能都知道,...