Effective C++ --3 资源管理
上一部分 Effective C++ --2 構造/析構/賦值運算
?
13、以對象管理資源
?? (1)為了防止new后提前return等沒有執行delete造成內存泄露,利用RAII(resource acquisition is initialization,資源取得時便是初始化時機)對象。
?? (2)兩個常被使用的RAII對象auto_ptr和tr1::shared_ptr。兩者都是智能指針,其析構函數自動對其所指對象調用delete。前者有所有權的概念,復制等操作會有所有權的轉移;后者支持RCSP(reference-counting smart pointer,引用計數型智能指針),通常是較佳選擇,因為其copy比較直觀。
14、在資源管理類中小心copying行為
? (1)復制RAII對象進行的是深度拷貝,不論指針或是指針所指內存都被復制。
? (2)普遍的RAII對象copying行為是:抑制copying、施行引用計數法。前者將copying操作聲明為private;后者使用shared_ptr,還可以指定刪除器,當引用計數為0時自動調用刪除器。
15、在資源管理類中提供對原始資源的訪問
? (1)APIs往往要求訪問原始資源,所以每一個RAII對象都應該提供一個“取得其所管理之資源”的方法。方法有兩種:顯式和隱式。顯示通過get()得到;隱式提供隱式轉換函數,將資源返回。
16、成對使用new和delete時采用相同的形式
? (1)new 和delete(單個對象),new[] 和delete[](一組對象), 使用形式一致。
? (2)不要對數組形式做typedefs動作,容易造成上述規則出錯。(對數組做typedefs是為了用到相同類型和大小的數組時方便使用,最好不要這么做。)
17、以獨立語句將newed對象置入智能指針
? (1)分離語句,將newed對象置于智能指針內,否則一旦拋出異常,可能造成內存泄露。
總結
以上是生活随笔為你收集整理的Effective C++ --3 资源管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C++ --2 构造
- 下一篇: Effective C++ --4 设计