91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中如何使用虛析構函數

發布時間:2021-07-14 14:59:18 來源:億速云 閱讀:140 作者:Leah 欄目:編程語言

C++中如何使用虛析構函數,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

C++的多態性是通過虛函數來實現的,虛函數的出現使得動態鏈接成為可能。

基于構造函數的特點,不能將構造函數定義為虛函數,但可以將析構函數定義為虛函數。當派生類的對象從內存中撤銷時,會先調用派生類的析構函數,然后自動調用基類的析構函數,如此看來析構函數也沒有必要定義為虛函數。

但是考慮如下這種情況,如果使用基類指針指向派生類的對象,而這個派生類對象恰好是用new運算創建的,這種情況下會如何呢?當程序使用delete運算撤銷派生類對象時,這時只會調用基類的析構函數,而沒有調用派生類的析構函數。如果使用的是虛析構函數的話,就不一樣了,所以定義虛析構函數有時候還是很有必要的。下面這段程序就說明了上面的問題:

沒有定義虛C++虛析構函數時,code如下:

#include < iostream> using namespace std;  class A  {  public:  A(){}  ~A()  {  cout< < "A::destructor"< < endl;  }  };  class B:public A   {  public:  B(){}  ~B()  {  cout< < "B::destructor"< < endl;  }  };  int main()  {  A *pA = new B;  //  delete pA;  return 0;  }

輸出的是A::destructor

這說明delete pA只是調用了基類A的析構函數,而沒有調用子類B的析構函數,這不是我們所想要的。而把基類A的析構函數定義為虛函數后,就可以達到了我們所想要的效果了。code如下:

#include < iostream> using namespace std;  class A  {  public:  A(){}  virtual ~A()  {  cout< < "A::destructor"< < endl;  }  };  class B:public A   {  public:  B(){}  ~B()  {  cout< < "B::destructor"< < endl;  }  };  int main()  {  A *pA = new B;  //  delete pA;  return 0;  }

輸出如下:

B::destrutor

A::destrutor

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

枞阳县| 蒙自县| 富顺县| 丹寨县| 达尔| 苍山县| 邵东县| 九龙城区| 报价| 青浦区| 罗田县| 和静县| 济南市| 荔浦县| 平乐县| 海丰县| 称多县| 邯郸市| 准格尔旗| 章丘市| 江都市| 栾川县| 舒城县| 临海市| 方正县| 堆龙德庆县| 固安县| 山阳县| 平乐县| 大石桥市| 新绛县| 盐亭县| 莱州市| 泰来县| 东乡| 彭山县| 枣强县| 湘乡市| 施甸县| 定西市| 巴林左旗|