C 記憶體管理方式 new和delete的操作

2021-10-07 03:37:06 字數 1246 閱讀 6532

c語言記憶體管理方式(malloc, realloc, calloc, free等函式)在c++中可以繼續使用,但有些地方就無能為力而且使用起來比較麻煩

我們先來看一段**, 建立自定義物件:

class

aprivate

:int _a;

int _b;

int _c;};

void

test2()

2. delete操作

跟new對應的釋放就是delete操作符, 我們來看一下delete釋放

void

test()

a(const a& a)~a

()private

:int _a;

int _b;

int _c;};

void

test()

那來個問題, 清理資源是在釋放空間之前還是之後呢???

我們想一下, 空間釋放了還能不能繼續操作這個空間的資源呢, 答案是不行了, 因為空間釋放後可能會被別人使用, 已經不屬於我門的空間了, 我們也不能進行操作, 所以 我們只能在釋放空間之前, 先呼叫析構函式 進行資源清理, 清理完之後再去釋放空間, 這就是delete做的事情

從上面的new和delete操作, 我們可以明顯發現, 這兩個屬於c++的操作符, 已經不再是函式操作了, 所以並不屬於庫函式, 而malloc和free是屬於庫函式的, 也可以發現, c++的記憶體管理的新方式寫起來更簡單一點 也不容易出錯, 因為我們不需要去計算資料的大小, 也不需要做型別的轉換,

new和delete只是在堆上的操作, 不管棧上的空間, 和malloc和free一樣 只管堆上的空間, 所以不要用delete去釋放棧上的空間, 就跟free去釋放棧上的空間是乙個道理,

需要注意的是動態申請自定義型別的連續空間時,必須要有預設建構函式(包括無參構造和全預設構造); 申請乙個物件的空間則沒有要求 直接把引數傳進去即可

a* pa =

newa(10

,9,8

);// 調帶參構造

a* pa1 =

new a;

// 調預設構造

a* pcopy =

newa

(*pa)

;// 也可以調拷貝構造

總結:

1 內建型別:

2 自定義型別:

C 記憶體管理方式

c 中通過new和delete運算子進行動態記憶體管理 如圖 注意 new delete new和delete一定匹配使用 c庫malloc free等來動態管理記憶體,為什麼c 還要定義new delete運算子來動態管理記憶體呢?因為 c語言是面向過程的語言,錯誤返回錯誤碼,c 是物件導向的語言...

C 記憶體管理方式

在c 中,記憶體分為 棧 堆 自由儲存區 全域性 靜態儲存區 常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束是這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率高,分配的記憶體容量有限。堆,就是那些由malloc等分配的記憶體塊,用free來...

記憶體管理方式

記憶體管理方式 塊 段 頁 段頁 頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。頁式管理採用請...