類設計系列 --- 解構函式篇 (轉)
類設計系列 --- 解構函式篇 (轉)[@more@]
類設計系列 --- 析構篇
是否需要自己的解構函式
不管你是不是建立了自己的解構函式,解構函式總是有的(如果需要的話,會免費送你一個)。那麼要不要建立自己的解構函式呢?答案非常簡單:
1、如果類分配了資源而沒有相應的自動釋放機制,需要進行手工資源釋放,那麼你需要一個解構函式。注意如果有了自動釋放機制,例如auto_ptr所管理的,那麼就不需要解構函式。
2、如果該類必須或者可以作為基類,那麼你需要一個虛擬解構函式,即便他什麼也不做。這時為了確保刪除基類指標時析構派生類。
3、除此以外,沒理由建立自己的解構函式,即便是一個空解構函式。
解構函式的注意事項
解構函式最大的注意事項是不能丟擲異常,否則任何使用該類的程式碼都無法做到異常。
如果解構函式不是虛擬的,意味著該類不可以作為基類,應明確寫出或透過手法實現該。譬如以下程式碼的MyClass就不可再派生。任何類只要加上DI
#define DI(x) public virtual NoDerive
template
class NoDerive
{
friend T;
NoDerive(){}
};
class MyClass : DI(MyClass)
{
};
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962672/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第六篇:為多型基類宣告虛解構函式多型函式
- 類的建構函式和解構函式函式
- C++ 類建構函式和解構函式C++函式
- 虛解構函式(√)、純虛解構函式(√)、虛建構函式(X)函式
- 建構函式與解構函式函式
- 高質量C++/C程式設計指南(第9章 類的建構函式、解構函式與賦值函式) (轉)C++C程式程式設計函式賦值
- C++之類解構函式為什麼是虛擬函式C++函式
- Hive行轉列函式Hive函式
- Oracle行轉列函式Oracle函式
- 類的轉換函式函式
- JS 建構函式與類JS函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- del解構函式函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- Oracle行轉列的函式Oracle函式
- Class:向傳統類模式轉變的建構函式模式函式
- 構造解構函式的妙用-成對出現 (轉)函式
- JS-陣列、函式、類與物件JS陣列函式物件
- RAII:在類的建構函式中分配資源,在解構函式中釋放資源AI函式
- 條款14 基類的解構函式一定要定義為虛擬函式(From Effective C++) (轉)函式C++
- 構造java函式(轉)Java函式
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- 關於建構函式與解構函式的分享函式
- 《高質量C++/C程式設計指南》第9章:類的建構函式、解構函式與賦值函式C++C程式程式設計函式賦值
- 類的陣列初始化後會呼叫拷貝建構函式陣列函式
- C++解構函式C++函式
- 13-解構函式函式
- 函式、引數、解構函式
- 建構函式詳解函式
- 各類檔案管理函式 (轉)函式
- 第十九篇:複製控制( 下 ) --- 自定義解構函式函式
- 19-父類的建構函式函式
- flutter-dart 類的建構函式FlutterDart函式
- C++物件導向程式設計 類和物件提高篇 建構函式C++物件程式設計函式
- 父類和子類的建構函式問題函式
- 建構函式與解構函式是否可以丟擲異常函式
- C++建構函式解構函式的執行過程C++函式
- 函式篇函式