智慧型指標 unique ptr的用法和實現

2021-10-14 08:00:33 字數 2159 閱讀 3173

二、unique_ptr的實現

unique_ptr是獨佔指標,防止其他智慧型指標與其共享物件。

包含標頭檔案

#include

與shared_ptr類似

兩種初始化方式:1、傳入指標通過建構函式初始化。2、也可以使用make_unique函式初始化。

int

* p=

newint(10

);unique_ptr<

int>

sp(p)

;//unique_ptrsp2(p);//error

//unique_ptrsp2(sp);//error

auto sp3 = make_unique<

int>

(100

);

std::move()物件轉移

#include

#include

#include

using

namespace std;

class

foo;

foo::

foo(

const

int& k):k_

(k)foo::

~foo()

void foo::

foop()

intmain()

reset方法重新指定(釋放物件)、通過release方法釋放所有權()並返回原指標

int

* k;

cout << k <<

" "

<<

*k << endl;

0x229a370 10

//0x229a370 0

解析見注釋

**如下(示例):

#include

//記憶體洩露檢測工具

#include

using

namespace std;

template

<

typename t>

class

unique_ptr

}public

:unique_ptr

(t* ptr =

nullptr);

~unique_ptr()

; t&

operator*(

)const

void

reset()

t*get(

)const

t*release()

t*operator

->()

const};

template

<

typename t>

unique_ptr

::unique_ptr

(t* ptr)

:ptr_

(ptr)

//模板類使用需指明型別

template

<

typename t>

unique_ptr::~

unique_ptr()

template

<

typename t>

t*move

(unique_ptr

& tmp)

}// test

intmain()

};unique_ptr

up2(

newnum(1

,2))

; cout << up2-

>a_ << endl;

unique_ptr<

int>

up3(

newint[10

]);*

(up3.

get()+

3)=10

; unique_ptr<

int>

up4(

move

(up3));

cout <<

"up4: "

<<

*(up4.

get()+

3)<< endl;

return0;

}

智慧型指標 unique ptr

unique ptr 是 c 11 提供的用於防止記憶體洩漏的智慧型指標中的一種實現,獨享被管理物件指標所有權的智慧型指標。int main std move是將物件的狀態或者所有權從乙個物件轉移到另乙個物件,只是轉移,沒有記憶體的搬遷或者記憶體拷貝所以可以提高利用效率,改善效能.get函式會返回儲...

c 智慧型指標 unique ptr

智慧型指標是基於raii機制實現的類 模板 具有指標的行為 過載了operator 與operator 操作符 可以 智慧型 地銷毀其所指物件。c 11中有unique ptr shared ptr與weak ptr等智慧型指標,可以對動態資源進行管理 unique ptr 唯一 擁有其所指物件,同...

C 智慧型指標 unique ptr

unique ptr 唯一 擁有其所指物件,同一時刻只能有乙個unique ptr指向給定物件 通過禁止拷貝語義 只有移動語義來實現 unique ptr指標本身的生命週期 從unique ptr指標建立時開始,直到離開作用域。離開作用域時,若其指向物件,則將其所指物件銷毀 預設使用delete操作...