智能指針auto_prt的使用(c++學習筆記)

 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++程序設計語言》中的差不多,但跟具體,據說比標準庫的有一些改進。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章