C primer 12章 動態記憶體

2021-08-14 06:46:26 字數 1030 閱讀 7028

這一章,由於本身對c語言動態分配以及指標比較熟悉,所以看起來會很輕鬆的。

int i , pi1 = &i , *pi2 = nullptr;

double *pd = new

double(33) , *pd1 = pd;

const ini *pci = new

const

int(12);

delete i;//編譯器發現i不是指標,產生編譯錯誤資訊。

delete pi1;//未定義,pi1指向區域性變數,編譯器不能區分指標是動態的還是靜態的。

delete pi2;//釋放空指標正確。

delete pd;//正常釋放。

delete pd1;//錯誤,重複釋放了,很有可能破壞堆空間。

delete pci;//正確釋放const物件。

shared_ptr

p1;//可以指向double,呼叫預設構造,初始化為空

shared_ptr

p2(new

int(42));//動態分配乙個int 並初始化為42,並通過shared_ptr建構函式直接初始化。

shared_ptr

p1 = new

int(1024);//拷貝初始化,錯誤,型別不匹配,因為int*不支援隱式轉換成shared_ptr

string s = string(10,'c');//拷貝初始化,先呼叫string建構函式,建立臨時物件,然後拷貝給s。

string s(10,'c');//直接呼叫對應的建構函式初始化。

//初始化使用了建構函式,必須明白。

int *p1 = new

int[10];//10個未初始化

int *p2 = new

int[10]();//10個值初始為0

int *p3 = new

int[2];//2個初始化器初始化,初始化器元素大於元素數目,分配失敗丟擲對應的異常,小於則後面進行值初始化。

《C Primer》第12章 動態記憶體

shared ptr允許多個指標指向同乙個物件,unique ptr獨佔所指向的物件,用make shared函式分配動態記憶體,返回物件的shared ptr.程式使用動態記憶體的原因之一是需要在多個物件間共享資料,自己直接管理記憶體的類與使用智慧型指標的類不同,它們不能依賴類的物件拷貝 賦值和銷...

C Primer 第12章 動態記憶體

程式有3中記憶體分配方式,靜態記憶體用來儲存區域性static物件,類static資料成員以及定義在任何函式之外的物件,棧記憶體用來儲存定義在函式內的非static物件。靜態記憶體和棧記憶體中的物件由編譯器建立或銷毀。程式用堆來儲存動態分配的物件,動態物件必須顯示銷毀。動態記憶體與智慧型指標 用ne...

c primer第十二章動態記憶體小結 12

第十二章 動態記憶體 1.動態記憶體 c 中,動態記憶體管理是通過一對運算子完成的 new和delete。c語言中通過malloc與free函式來實現先動態記憶體的分配與釋放,c 中new與delete的實現其實會呼叫malloc與free。由於 c 語言沒有自動記憶體 機制,每次 new 出來的記...