二、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操作...