動態記憶體與智慧型指標(C Primer 筆記)

2021-10-03 08:59:06 字數 936 閱讀 1183

auto p=make_shared<

int>(42

);// p指向的物件只有p乙個引用者

auto q(p)

;// p和q指向相同物件,此物件有兩個引用者

shared_ptr<

int>p1=

newint

(1024);

//錯誤,必須使用直接初始化形式

shared_ptr<

int>p2(

newint

(1024))

;//正確,p1的初始化隱式要求編譯器用new返回的int*建立shared_ptr,而內建指標無法隱式轉換為智慧型指標。

unique_ptrp3(

newstring

("***"))

;//將所有權從p3轉移給p2

p2.reset

(p3.

release()

);

weak_ptr是一種不控制所指向物件生存期的智慧型指標,它指向由shared_ptr管理的物件。將乙個weak_ptr繫結到乙個shared_ptr不會改變shared_ptr的引用計數。weak_ptr有「弱」共享物件特點。

w.expired() //若w.use_count()為0,返回true

w.lock() //若expired為true,返回乙個空shared_ptr;否則返回乙個指向w物件的shared_ptr當建立乙個weak_ptr時,要用shared_ptr來初始化。auto p=make_shared(42); weak_ptr wp§; //wp和p指向相同物件,由於是弱共享,所以p的計數器不變。

不能用weak_ptr直接訪問物件,必須呼叫lock。此函式檢查weak_ptr指向的物件是否還存在。

動態記憶體與智慧型指標

動態記憶體與智慧型指標 靜態記憶體用來儲存區域性static物件 類static資料成員以及定義在任何函式之外的變數 全域性變數 棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在其定義的程式塊執行時才存在 static物件在使用之...

動態記憶體與智慧型指標

在c 中,動態記憶體的管理是通過一對運算子來完成的 new,在動態記憶體中為物件分配空間並返回乙個指向該物件的指標,我們可以選擇對物件進行初始化 delete,接受乙個動態物件指標,銷毀該物件並釋放與之關聯的記憶體。動態記憶體在使用時很容易出問題,有時會忘記釋放記憶體,造成記憶體洩露,有時在尚有指標...

動態記憶體與智慧型指標

我們先來看一些物件的生存期。全域性物件在程式啟動時分配,在程式結束時銷毀。區域性static物件在第一次使用前分配,在程式結束時銷毀。區域性自動物件,在進入其定義所在的程式塊兒時被建立,離開塊時銷毀。即,它們都是由編譯器自動建立與銷毀。而動態分配的物件的生存期與它們在 建立的無關,只有當顯式地被釋放...