條款13 以物件管理資源

2021-09-12 10:39:44 字數 348 閱讀 7737

以物件管理資源的兩個關鍵:

auto_ptr弊端:一旦發生複製,被複製的auto_ptr就會被設為null(受auto_ptrs管理的資源絕對沒有乙個以上的auto_ptr同時指向它),stl容器容不得auto_ptr。

好的替代方案:

shared_ptr(引用計數型智慧型指標),持續追蹤有多少物件指向某筆資源,無人指向它時自動刪除該資源。良好地支援copy行為。

弊端:無法打破環狀引用,兩個已經沒被使用的物件彼此互指,好像還處在「被使用」狀態。

auto_ptr和shared_ptr不能使用在c++動態分配陣列上(編譯不會報錯)。

工廠函式返回原始指標極易引起資源洩漏,不建議。(條款18)

條款13 以物件管理資源

問題 解決 智慧型指標。把資源放入物件內,利用析構函式確保釋放。1 資源取得時機便是初始化時機 resource acquisition is initialization raii 2 管理物件運用析構函式確保資源被釋放。別讓auto ptr同時指向同一物件。為了預防這個問題,能過copy建構函式...

條款13 以物件管理資源

我們都知道,當new乙個東西之後,必須delete它。但是問題可能出現在在new和delete之間 比如中間出現了異常,或者return之類的。一種比較好的作法是通過物件來管理 因為當物件的宣告週期結束以後,會呼叫析構函式,而在析構函式中delete,這樣的作法就靠譜多了。在標準c 中,定義了2種管...

條款13 以物件管理資源

一 如下 假設各種子型別繼承 root class investmen class investment investment createinevstment factory函式 void f 在 區域內乙個過早return,或者期間丟擲異常,流程控制不可能經過這條語句,所以這樣的話就會導致資源洩...