智慧型指標(二)智慧型指標的方法和構造

2021-10-06 15:33:57 字數 939 閱讀 6787

預設構造shared_ptrspunique_ptrup

指標構造shared_ptrsp(t *)unique_ptrup(t *),這裡預設為explicit

帶刪除器的構造shared_ptrp(q,d)q這裡可以內建指標和智慧型指標,同時將用d析構器代替delete。所以定義了這麼乙個帶刪除器的建構函式,是因為相容沒有定義析構函式的類。

shared_ptr sp=new t;

//error

unique_ptr up=new t;

//error

shared_ptr

sp1(sp2)

;//ok,沒有發生隱式轉換

unique_ptr

up1(up2)

;//not ok,沒有拷貝構造

sp1=sp2;

up1=up2;

//deleted funciton,not ok

p.get()返回乙個與智慧型指標指向相同的內建指標

reset有多個過載形式,分別是p.reset()p.reset(q)p.reset(q,d),作用是將乙個智慧型指標重置為內建空指標(或q指標)

shared_ptrsp=make_shared(args)make_unique(c++14)make_unique_default_init(c++20)

[1]相對於直接使用指標來進行構造

智慧型指標(二)

智慧型指標存在的問題 通過對指標的封裝,讓類可以像指標一樣。這樣的智慧型指標還是存在些問題。之前我們解決了,物件拷貝問題,引入引用技術儲存拷貝次數,當拷貝次數為1時,便可以直接釋放析構物件。現在存在的新的問題是,之前都是用來管理單個物件,那麼如果想管理乙個陣列呢?因此出現了下面的問題 class a...

智慧型指標 強弱智慧型指標

在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...

智慧型指標和萬能指標

智慧型指標 智慧型指標 smart pointer 是儲存指向動態分配 堆 物件指標的類。除了能夠在適當的時間自動刪除指向的物件外,他們的工作機制很像c 的內建指標。智慧型指標在面對異常的時候格外有用,因為他們能夠確保正確的銷毀動態分配的物件。他們也可以用於跟蹤被多使用者共享的動態分配物件。智慧型指...