C 中的動態陣列與智慧型指標

2022-08-26 09:42:09 字數 675 閱讀 2254

動態陣列不是陣列!

將new t 分配得到的記憶體稱為「動態記憶體」,這種說法其實不準確,使用new分配乙個陣列時,我們並未得到乙個陣列型別的物件,而是乙個陣列元素型別指標,即使用型別別名定義乙個陣列型別,new也不會分配乙個陣列型別的物件。

我們正在分配乙個陣列的試試生之時不可見的,連[num]都沒有,new返回的是乙個元素型別的指標。

動態分配乙個空陣列時合法的

如:

size_t n =get_size();

int* p = new

int[n]; //當n是0的時候也同樣是正確的

釋放動態陣列: delete  p;

注意:很重要!忽略方括號的delete p是未定義的。因為p指向物件陣列首元素,而不是物件。

智慧型指標和動態陣列

unique_ptr up(new

int[10]); //

up指向包含10個位初始化int的陣列

up.release(); //

自動呼叫delete銷毀指標

C 動態記憶體與智慧型指標

qq 1841545843 郵箱 jiaxx903 163.com 靜態記憶體用來儲存區域性 static 物件 類的 static 資料成員,以及定義在任何函式之外的變數。棧記憶體用來儲存定義在函式之內的 static 物件。除了棧記憶體和靜態記憶體外,每個程式還擁有乙個記憶體池,這部分稱之為 堆...

c 動態記憶體與智慧型指標

目前為止我們學過靜態記憶體和棧記憶體,分配在其中的物件由編譯器自動建立和銷毀,靜態記憶體 用來儲存區域性static物件 類的static資料成員 以及定義在任何函式體之外的變數。在物件使用之前分配,程式結束時銷毀。棧記憶體 用來儲存定義在函式內的非static物件。僅在物件定義的程式塊執行時存在,...

C 中的智慧型指標

長久以來 c 最被人詬病的就是它的記憶體管理,寫個稍微複雜點的程式就經常會碰到記憶體洩漏問題。為了解決這個問題,c 也做了許多努力。在 c 98 標準中首先提出了智慧型指標的概念,引入了 auto ptr。但是在實踐中,auto ptr 有不少問題。因此在 c 11 標準中對原有的智慧型指標又做了進...