unique_ptr和auto_ptr類似,
但是unique_ptr擁有它指向的物件,某個時刻只能有一個unique_ptr指向一個給定物件,當unique_ptr被銷毀時,它所指向的物件也被銷毀,
初始化:
必須采用直接初始化形式:

不能呼叫賦值或拷貝建構式,避免了兩個指標指向同一塊地址的問題,避免了auto_ptr一定的錯誤,
但是仍然可以用其他方法:
int *x = new int(10);
unique_ptr<int> c(x);
unique_ptr<int> d(x);
此時仍然出現了兩個指標指向同一塊地址的問題,仍然會發生錯誤,
使用move轉移 unique_ptr 物件的所有權
我們無法復制 unique_ptr 物件,但我們可以轉移它們,
其實跟auto_ptr的復制一樣,也是將當前的移動給另一個,只不過這種需要顯式提醒一下,
移動完,原物件也就不能隨便使用了
int *x = new int(10);
unique_ptr<int> a(x);
unique_ptr<int> b(move(a));
此時a就不能再使用了,因為物件已經從a轉化到了b身上了
函式:
仍然具有get(),reset(),release()的函式:
- get()獲取真正地址
- reset()釋放之前指向的物件
- release()放棄當前指標的控制權

代碼:
#include<iostream>
#include<memory>
using namespace std;
int main()
{
int *x = new int(10);
unique_ptr<int> c(x);
cout << x << endl;
cout << c.get() << endl; //獲取真正地址
c.release(); //釋放自己的控制權
cout << *x << endl;
c.reset(); //直接將x也析構了
cout << *x;
system("pause");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/258771.html
標籤:其他
