類設計系列 --- 解構函式篇 (轉)

amyz發表於2007-08-16
類設計系列 --- 解構函式篇 (轉)[@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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章