在《c++ primer》这本书中看到,两种智能指针管理内存:
shared_ptr<int> sp (new int[10],[](int*p){delete[] p;}):
unique_ptr<int[]> up (new int[10]);
为什么使用shared_ptr
的时候不需要指明int[]
而可以使用int
呢?
大家讲道理2017-04-17 14:54:35
uniqe_ptr
uniqe_ptr
錯誤搭配將導致錯誤。
而shared_ptr定標準的時候,沒人想到要給shared_ptr template加一個陣列的specialization。所以shared_ptr
shared_ptr
你必須告訴shared_ptr怎麼刪除這個數組,就是後面那個[](int*p){delete[] p;}),沒有這個,delete的時候會出錯。
為何shared_ptr訂標準的時候沒加上呢?因為他們忘了/懶/沒人寫出一個proposal出來,大概這樣吧。
其實陣列的unique_ptr和shared_ptr並不是很常見,直接用vector不就好了。 。
伊谢尔伦2017-04-17 14:54:35
@hearts 說得已經比較全面了,補充一點。
大多數情況下直接使用vector
就好,標準函式庫已經優化得很好了。但是shared_ptr
和unique_ptr
並不是沒有用處,特別是在多態時,具體見C++ Primer面對對象程式設計那一節,shared_ptr
和unique_ptr
還有之前得auto_ptr
都是為了取代裸指針【危險】,實際情況中應該說shared_ptr
用得比較少,unique_ptr
常用一些。
當然無論是vector
還是*_ptr
都是為了RAII,這又是另一個好玩的話題了。
一些淺見,請多指教。