C 智慧型指標 unique ptr

2021-07-11 14:25:53 字數 1275 閱讀 9635

unique_ptr「唯一」擁有其所指物件,同一時刻只能有乙個unique_ptr指向給定物件(通過禁止拷貝語義、只有移動語義來實現)。

unique_ptr指標本身的生命週期:從unique_ptr指標建立時開始,直到離開作用域。離開作用域時,若其指向物件,則將其所指物件銷毀(預設使用delete操作符,使用者可指定其他操作)。

unique_ptr指標與其所指物件的關係:在智慧型指標生命週期內,可以改變智慧型指標所指物件,如建立智慧型指標時通過建構函式指定、通過reset方法重新指定、通過release方法釋放所有權、通過移動語義轉移所有權。

#include 

#include

using

namespace

std;

int main()

詳情見前文資源管理對把分配資源放入容器中的討論。

由於在函式中建立資源是非常容易導致記憶體洩露的。因為客戶可能會忘記哪個指標指向了on the heap的資源。

unique_ptrfoo()  

彌補了auto_ptr不能放入容器中的問題。同時unique_ptr並無copy語義,只能用move轉移語義。

#include 

#include

#include

using

namespace

std;

int main()

unique_ptr array_ptr(new

int [3]);

array_ptr[0] = 2;

unique_prt的部分原始碼。(使用了成員模板)

template

unique_ptr(unique_ptr<_up, _ep>&);

unique_ptr預設的資源刪除操作是delete/delete,若需要,可以進行自定義:在 資源管理 介紹shared_ptr時也有提及這部分內容。簡單的說,就是我們析構資源不一定是delete,可能是要我們自定義的函式。

void end_connection(connection *p)  //資源清理函式  

unique_ptrdecltype(end_connection)*> //資源清理器的「型別」

p(&c, end_connection);// 傳入函式名,會自動轉換為函式指標

在c++11環境下,auto_ptr被看做「遺留的」,他們有如下區別:

c 智慧型指標 unique ptr

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

C 智慧型指標 unique ptr

unique ptr和auto ptr類似。但是unique ptr擁有它指向的物件。某個時刻只能有乙個unique ptr指向乙個給定物件。當unique ptr被銷毀時,它所指向的物件也被銷毀。必須採用直接初始化形式 不能呼叫賦值或拷貝建構函式,避免了兩個指標指向同一塊位址的問題,避免了auto...

智慧型指標 unique ptr

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