程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 為什麼有時類的析構函數要定義為protected呢?

為什麼有時類的析構函數要定義為protected呢?

編輯:關於C

 

對於堆中的對象,我們通常用new/delete來創建/銷毀。當調用new時,它會自動去調用相應類的構造函數。同樣,當調用delete時,它會自動去調用相應類的析構函數。當我們在棧中產生對象時,前面說的過程是自動完成的。即:不需要我們顯式調用new/delete。這裡有個前提:類的構造/析構都是public的。

 

然而,當我們想禁止在棧中產生對象時,如何來實現呢?

 

將構造函數設為private行嗎?no!這樣對象雖然不能在棧中產生,但同樣也不能在堆中產生了。

 

將析構函數設為private行嗎?bad!這樣雖然限制了棧對象,但同時也限制了繼承。

 

將析構函數設為protected行嗎?yes!

 

例如:

 

class A

 

{  

 

protected:   

 

           A() { }

 

    ~A() { }  

 

public:   

 

         static A* create()

 

   {    return new A() ;//調用保護的構造函數   }   

 

         void destroy()   

 

         {    delete this ;//調用保護的析構函數   }

 

};

 

我們可以這樣來使用它:

 

A* pa= A::create();

 

pa->destroy() ;

摘自:huzzyy的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved