[C++] Smart Pointer 整理
傳統上記憶體的管理主要利用 new 跟 delete 來進行,但是在指標傳遞的時候常常會不知道何時應該要釋放記憶體?
所謂「Smart Pointer」是幹嘛的呢?基本上,他是一種用來模擬傳統的 pointer、提供一些附加功能的特殊資料型別;比較常見的功能,主要就是透過自動資源回收(automatic garbage collection)的機制、來進行記憶體管理了。
針對以下三種 C++11 支援的 smart pointer 做整理:
1. unique_ptr: 確保一份資源(被配置出來的記憶體空間)只會被一個 unique_ptr 物件管理的 smart pointer;當 unique_ptr 物件消失時,就會自動釋放資源。
2. shared_ptr: 可以有多個 shared_ptr 共用一份資源的 smart pointer,內部會記錄這份資源被使用的次數(reference counter),只要還有 shared_ptr 物件的存在、資源就不會釋放;只有當所有使用這份資源的 shared_ptr 物件都消失的時候,資源才會被自動釋放。
3. weak_ptr: 搭配 shared_ptr 使用的 smart pointer,和 shared_ptr 的不同點在於 weak_ptr 不會影響資源被使用的次數,也就是說的 weak_ptr 存在與否不代表資源會不會被釋放掉。