c 中的記憶體分配和智慧型指標

2021-07-23 03:10:55 字數 1246 閱讀 9428

1、靜態記憶體用來儲存區域性static物件、類static資料成員以及定義在任何函式之外的變數

2、棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀

3、堆記憶體,儲存動態分配的物件

4、兩種智慧型指標shared_ptr允許多個指標指向同乙個物件,unique_ptr則獨佔所指向的物件。

標準庫中定義的乙個名為week_ptr的伴隨類,一種弱引用,指向shared_ptr所管理的物件。都定義在memory標頭檔案

5、shared_ptr和unique_ptr都支援的操作

shared_ptrsp   空只能指標,指向型別為t的物件

unique_ptrup  

p                           p用作條件判斷,若p指向乙個物件,則為true

*p                         解引用、獲取它指向的物件

p->mem               等價於(*p).mem

p.get()                  返回p中儲存的指標 ,若智慧型指標釋放了其物件,返回的指標所指向的物件也就消失了

swap(p,q)              等價p.swap(q)交換p和q指標

6、shared_ptr獨有的操作

make_shared(args)             返回乙個shared_ptr,指向乙個動態分配的型別為t的物件。使用args初始化此物件

shared_ptrp(q)                    p是q的拷貝;遞增q中的計數器、q中的指標鼻血能轉化為t*

p=q                                          p和q都是shared_ptr,所儲存的指標必須能相互轉化。遞增q中的計數器,遞減p中的計數器.p的引用計數為0,釋放記憶體

例如:auto r = make_shared(42);

r = q ;                             //給r賦值,指向另乙個位址;

//遞增q指向的物件的引用計數;

//遞減r原來指向的物件引用計數

//r原來指向的物件沒有引用者,自動釋放

p.unique()                                 若p.use_count()為1,返回true、否則返回false

p.use_count()                            返回與p共享物件的智慧型指標數量;主要用於除錯

C 中的智慧型指標

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

c 中的智慧型指標

1.智慧型指標的作用 為了防止記憶體洩露的問題 c 程式設計中使用堆記憶體是非常頻繁的操作,堆記憶體的申請和釋放都由程式設計師自己管理。程式設計師自己管理堆記憶體可以提高了程式的效率,但是整體來說堆記憶體的管理是麻煩的,c 11中引入了智慧型指標的概念,方便管理堆記憶體。使用普通指標,容易造成堆記憶...

C 中的智慧型指標

c 中的四個智慧型指標分別是 1.shared ptr 2.unique ptr 3.weak ptr 4.auto ptr 已經被c 11棄用 在c 11的環境中會爆警告warning auto ptr is deprecated 智慧型指標的作用是管理乙個指標。因為存在以下這種情況 申請的空間在...