C 11智慧型指標之unique ptr

2021-06-25 10:53:10 字數 848 閱讀 2421

unique_ptr是乙個獨享所有權的智慧型指標,它提供了一種嚴格語義上的所有權,包括:

1、擁有它所指向的物件。

2、無法進行複製構造,也無法進行複製賦值操作。也就是說,我們無法得到指向同乙個物件的兩個unique_ptr。但是可以進行移動構造和移動賦值操作。

3、儲存指向某個物件的指標,當它本身被刪除釋放的時候(比如,離開了某個作用域),會使用給定的刪除器釋放它指向的物件。

使用unique_ptr,可以實現以下功能,包括:

1、為動態申請的記憶體提供異常安全。

2、將動態申請記憶體的所有權傳遞給某個函式。

3、從某個函式返回動態申請記憶體的所有權。

4、在容器中儲存指標。

5、所有auto_ptr應該具有的(但無法在c++ 03中實現的)功能。

下面是一段傳統的會產生不安全異常的**:

1 x*f()

2

解決方法是,使用unique_ptr來管理這個物件的所有權,由其進行這個物件的釋放工作。

1 x*f()

2

如果程式執行過程中丟擲了異常,unique_ptr就會釋放它所指向的物件。但是,除非我們真的需要返回乙個內建的指標,我們還可以返回乙個unique_ptr。

1 unique_ptrf()

2

現在,我們可以這樣使用函式f():

1

void

g()2

//在函式退出的時候,q以及它所指向的物件都被刪除釋放

unique_ptr具有移動語義,所以我們可以使用函式f()返回的右值對q進行初始化,這樣就簡單地將所有權傳遞給了q。

C 11之智慧型指標

c 98提供了了智慧型指標auto ptr,但c 11已將其摒棄,並提供了unique ptr和shared ptr。這三種智慧型指標模板都定義了類似指標的物件,可以將new獲得的位址賦給這種物件。當智慧型指標過期時,這些記憶體將自動被釋放。其基本用法如下 include include inclu...

c 11之智慧型指標

由於在c 中我們可以動態分配記憶體,但有時候我們會忘記用 delete或free釋放記憶體,就會導致記憶體洩露。所以c 11提供了智慧型指標這種東西 本文參考了知乎某知乎友的 比如下面這兩種情況 1 記憶體洩漏 str1所指的資源沒有被釋放 2 多重釋放,引起程式崩潰 可能平時都寫在乙個檔案不會忘記...

C 11智慧型指標

本文介紹c 的四種智慧型指標,其中後三種是c 11新增加的,auto ptr已被棄用。要編譯c 11,需要安裝g 4.8 sudo add apt repository ppa ubuntu toolchain r test sudo apt get update sudo apt get inst...