高質量C++程式碼:智慧指標千萬不要這樣用(一)
我還是先從下面這段程式碼來開始我們今天的分析,大家看看下面這段程式碼存在什麼問題呢?
#include
編譯並執行上面這段程式碼,我們發現執行的時候,出現了錯誤。
為什麼會存在這個錯誤呢?
簡單地說是因為:同一指標交給兩個智慧指標管理導致二次釋放
由於同一塊記憶體由多個管理者託管,但它們彼此之間又不知道對方的存在,這樣就導致在它們各自生命週期結束時都會釋放這塊記憶體的錯誤。
我們應該如何避免類似的錯誤:
不使用相同的raw指標初始化(或reset)多個智慧指標。
不要delete std::shared_ptr::get返回的指標。
不使用std::shared_ptr::get初始化或reset另一個智慧指標。
如果你使用std::shared_ptr::get返回的指標,記住當最後一個對應的智慧指標銷燬後,你的指標就變為無效了。
如果你使用智慧指標管理的資源不是new分配的記憶體,記住傳遞給它一個刪除器。
關注我,教你寫好高質量的程式碼
相關閱讀
C++11 shared_ptr千萬不要迴圈引用