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