亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

仲巴县| 宜良县| 吴旗县| 朝阳市| 桐庐县| 张家口市| 浪卡子县| 新蔡县| 金湖县| 郴州市| 扎鲁特旗| 开平市| 如皋市| 肇庆市| 昭通市| 新泰市| 阿合奇县| 翁牛特旗| 垦利县| 北流市| 凤翔县| 华亭县| 达日县| 台中市| 灵武市| 神木县| 揭东县| 阳朔县| 柘荣县| 磴口县| 普兰县| 乐平市| 伊宁市| 衡山县| 任丘市| 兴仁县| 梁山县| 峨山| 龙海市| 秦安县| 南安市|