智慧型指標auto prt的使用(c 學習筆記)

2021-05-08 03:07:08 字數 542 閱讀 4655

c++中如果要申請資源一般用到new,最後釋放資源delete,如果我們在delete之前就退出了

函式呢,看下面的**:

這樣我們就要多寫乙個delete,如果if有很多分支或者別情況呢。甚至有時候我們忘了delete呢,他將導致記憶體洩露。如果使用智慧型指標auto_ptr就不會出現這種情況了。

下面我們來看乙個例子:

編譯後結果為 44    delete

很明顯我們可以看到ptr被釋放掉了。

注意,智慧型指標有擁有權轉移的性質,ptr1給ptr2賦值後,ptr1就被delete掉了就不能再取他的值了。**如下:

編譯後結果為22  null  null  22

可以看到執行ptr2 = ptr1後ptr1指向了null。

如果我們不希望看到擁有權的改變那就要在宣告是加const。擁有權不可以改變但你可以取他的值來賦值,例如:*ptr1 = * prt2。

下面附乙份《c++標準程式庫》中提供的auto_ptr的實現**,看了下,跟《c++程式語言》中的差不多,但跟具體,據說比標準庫的有一些改進。

C 智慧型指標使用

由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行 delete 的情況並不罕見。std auto ptr boost scoped ptr boost ...

C 智慧型指標的使用

測試環境 win7,vs2012 如果未安裝boost,請參考 涉及智慧型指標 shared ptr,weak ptr,scoped ptr,auto ptr 其它 enable shared from this 總呼叫函式 testsmartpointer 可以將其放在main 中執行。解釋在 中...

C 智慧型指標的使用

c 11中提供了三種智慧型指標 unique ptr shared ptr weak ptr 來自動 堆分配的物件。unique ptr如它的名字所傳達的意思,其所指向的記憶體區不能與unique ptr定義的另乙個指標共享。看 比較容易理解。include include using namesp...