c 智慧型指標(四)之unique ptr

2021-08-14 00:04:51 字數 1327 閱讀 5868

和shared_ptr不同,某個時刻只能有乙個unique_ptr指向乙個給定的物件。

沒有類似make_shared的標準庫函式返回乙個unique_ptr,需要將其繫結到乙個new返回的指標上。

unique_ptr u(new

int(1024));

由於unique_ptr擁有它所指向的物件,所以他不支援普通的拷貝和賦值操作。

unique_ptr u(new

int(1024));

unique_ptr m(u);//錯誤,unique_ptr不支援拷貝

unique_ptr u1;

u1 = u;//錯誤,unique_ptr不支援賦值

雖然我們不能拷貝或者賦值unique_ptr,但是可以通過呼叫release或者reset將指標的所有權從乙個非const的unique_ptr轉移給另乙個unique;

unique_ptr u(new

int(1024));

//將所有權從u轉移給m

unique_ptr m(u.release());//release將u置空

unique_ptr n(new

int(2048));

m.reset(n.release());//reset釋放了m原來指向的記憶體,m指向n原來指向的記憶體

如果我們不用另乙個智慧型指標來儲存release返回的指標,我們的程式就負責資源的釋放。

u.release();//錯誤,p2不會釋放記憶體,而我們丟失了指標。

auto p = u.release();//正確,但我們必須記得delete(p)

不能拷貝unique_ptr的規則有乙個例外:我們可以拷貝或複製乙個將要被銷毀的unique_ptr。最常見的例子是從函式返回乙個unique_ptr:

unique_ptr clone(int p)
還可以返回乙個區域性物件的拷貝:

unique_ptr clone(int p)
類似shared_ptr,unique_ptr預設情況下用delete釋放它指向的物件。與shared_ptr一樣,我們可以過載乙個unique_ptr預設的刪除器。

unique_ptrp(new objt,fcn);//p指向乙個型別為objt的物件,並使用乙個型別為delt的物件釋放objt物件。

C 之智慧型指標

本文發表於1999年10月份的c c users journal,17 10 1.為什麼稱它為 自動 指標?auto ptr只是眾多可能的智慧型指標之一。許多商業庫提供了更複雜的智慧型指標,用途廣泛而令人驚異,從管理引用的數量到提供先進的 服務。可以把標準c auto ptr看作智慧型指標的ford...

C 之智慧型指標

c 中有四個智慧型指標 auto ptr,shared ptr,weak ptr,unique ptr,其中後三個是c 11支援,並且第乙個已經被c 11棄用。智慧型指標從書面意思來說,就是智慧型。主要是動態記憶體的使用很容易出問題,要在正確的時間正確釋放記憶體是很困難的。有時我們可能忘了釋放記憶體...

c 之智慧型指標

設計出乙個class像指標,但是功能更強大,分為兩種形式一種是標準庫的源 早期的指標,多半是過載 和 第二種是迭代器的智慧型指標 1.早期的智慧型指標 templateclass shared ptr t operator const shared ptr t p px p private t px...