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():
1void
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...