和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...