天天看點

[讀書筆記][effective C++]條款13-以對象管理資源感受

感受

在閱讀第13章的時候, 我讀到作者這麼寫, 以對象管理資源.

最基本的資源是記憶體, 其次是很多其他的資源,比如socket, 比如連接配接池中的對象, 互斥鎖mutex, 檔案描述符扥等!!

這些資源必須及時歸還給計算機, 就好像你從圖書館借了一本書必須還給圖書館一樣!

那麼, 類似于在 linux 裡, 一切都是檔案, 在C++裡, 一切資源, 都首先,應該是一個指針(或者他們本身的類型的對象)!

然後, 如果一個方法傳回給我們一個資源的指針, 為了防止我們在一個方法結束後忘記釋放指針(或者異常處理導緻釋放代碼不可達), 我們應該使用類似智能指針的對象來管理這些指針.

我們之是以要這麼做, 是因為有的代碼之前不抛異常,後來又抛異常了,等等, 為了防止這種情況, 我們也一定要能夠自動管理指針, 因為有些代碼是别人寫的,我們無法掌控的!

經典的比如 auto_ptr, shared_ptr, unique_ptr, lock_guard.

必須說明的是, auto_ptr 和 shared_ptr 無法智能管理對象的指針數組, 他們隻能釋放數組的第一個元素. 是以需要用boost庫裡面的 scoped_array 和 shared_array.

還有一點是, 如果要手動釋放資源, 需要自己編寫一些類似隻能指針的工具, 需要認真分考慮一些細節.