unique ptr如何實現獨佔物件

2021-10-11 14:51:22 字數 957 閱讀 7029

在c++11中有兩個智慧型指標型別來管理動態物件,share_ptr允許多個指標指向同乙個物件,unique_ptr則「獨佔」所指物件。

我們知道指標或引用在離開作用域時是不會進行析構的,但是類在離開作用域時會自動執行析構函式,所以我們可以用乙個類來實現指標指標(unique_ptr本質上是乙個類,只是可以像乙個指標一樣使用)。因此我們可以通過析構函式呼叫delete去釋放資源。那麼如何實現「獨佔」呢?我們可以在類中把拷貝建構函式和賦值運算宣告為private,這樣就不可以對指標指向進行拷貝了,也就不能產生指向同乙個物件的指標。

因為把拷貝建構函式和賦值操作符都宣告為delete或private,這樣每乙個智慧型指標要指向乙個物件時只能是指向乙個新例項化的物件而不能通過「=」或者拷貝去指向前面已經建立了的物件,例如「unique ptr=&aa」,這裡呼叫了賦值操作符這是不可以的。

template

<

class

t>

class

smartptr

t&operator*(

) t&

operator

->()

// 析構時就將資源釋放

~smartptr()

private

: t* _ptr;

// c++11 中防止拷貝的方式:delete

smartptr (smartptr

const&)

=delete

; smartptr&

operator

=(smartptr&)

=delete;}

;

void

use_factory

(t arg)

//p離開了作用域,但它指向的記憶體會被釋放掉

//ptr申請的記憶體沒有被釋放,造成了記憶體洩漏

智慧型指標 實現unique ptr

之前介紹了auto ptr實現,但其並不完美,當然也不 智慧型 鑑於之前的auto ptr實現了簡單的資源管理權的轉移,下面來看一下另一種思想的unique ptr。在unique ptr中為了避免繁瑣的拷貝 賦值出現的問題,unique ptr更像是乙個油鹽不進的老頑固,別人怎麼說,他也不聽,直接...

簡易實現unique ptr智慧型指標

c 11的unique ptr智慧型指標 一旦建立,就指向那塊記憶體,以後再也不能讓其它的智慧型指標指向同一塊記憶體。這個指標實現比較簡單,只需定義乙個類的例項時,自己類內部刪除拷貝建構函式和刪除賦值運算子過載函式就可以了。include using namespace std templatecl...

linux C 執行緒池 獨佔共享鎖實現

如果乙個應用需要頻繁的建立和銷毀執行緒,而任務執行的時間又非常短,這樣執行緒建立和銷毀的帶來的開銷就不容忽視,這時也是執行緒池該出場的機會了。如果執行緒建立和銷毀時間相比任務執行時間可以忽略不計,則沒有必要使用執行緒池了,本文使用共享獨佔模式實現執行緒池中任務同步與互斥。使用場景主要用於寫入任務較少...