精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

C++中的虛析構函數有什么用-創新互聯

今天小編給大家分享一下C++中的虛析構函數有什么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

創新互聯是一家專業提供石城企業網站建設,專注與網站設計、成都網站制作、HTML5、小程序制作等業務。10年已為石城眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。

一.虛析構函數的作用

總的來說虛析構函數是為了避免內存泄露,而且是當子類中會有指針成員變量時才會使用得到的。也就說虛析構函數使得在刪除指向子類對象的基類指針時可以調用子類的析構函數達到釋放子類中堆內存的目的,而防止內存泄露的.

我們知道,用C++開發的時候,用來做基類的類的析構函數一般都是虛函數。可是,為什么要這樣做呢?下面用一個小例子來說明:

#include
using namespace std;

class ClxBase
{
  public:
    ClxBase() {};
    virtual ~ClxBase() { cout<<"delete ClxBase"<DoSomething();
   delete pTest;
  return 0;
}

C++中的虛析構函數有什么用

但是,如果把類ClxBase析構函數前的virtual去掉,那輸出結果就是下面的樣子了:

C++中的虛析構函數有什么用

沒有調動子類的析構函數

也就是說,類ClxDerived的析構函數根本沒有被調用!一般情況下類的析構函數里面都是釋放內存資源,而析構函數不被調用的話就會造成內存泄漏。我想所有的C++程序員都知道這樣的危險性。當然,如果在析構函數中做了其他工作的話,那你的所有努力也都是白費力氣。

所以,文章開頭的那個問題的答案就是--這樣做是為了當用一個基類的指針刪除一個派生類的對象時,派生類的析構函數會被調用。

當然,并不是要把所有類的析構函數都寫成虛函數。因為當類里面有虛函數的時候,編譯器會給類添加一個虛函數表,里面來存放虛函數指針,這樣就會增加類的存儲空間。所以,只有當一個類被用來作為基類的時候,才把析構函數寫成虛函數。

總結一下虛析構函數的作用:

(1)如果父類的析構函數不加virtual關鍵字
當父類的析構函數不聲明成虛析構函數的時候,當子類繼承父類,父類的指針指向子類時,delete掉父類的指針,只調動父類的析構函數,而不調動子類的析構函數。

(2)如果父類的析構函數加virtual關鍵字
當父類的析構函數聲明成虛析構函數的時候,當子類繼承父類,父類的指針指向子類時,delete掉父類的指針,先調動子類的析構函數,再調動父類的析構函數。

二.虛析構函數的原理分析

#include
using namespace std;

class Base
{
public:
  Base(){cout<<"create Base"<

從創建講起,用gdb調試你會發現,

(1)先調用父類的構造函數,再調用子類的構造函數,

這里有一個問題:父類的構造函數/析構函數與子類的構造函數/析構函數會形成多態,但是當父類的構造函數/析構函數即使被聲明virtual,子類的構造/析構方法仍無法覆蓋父類的構造方法和析構方法。這是由于父類的構造函數和析構函數是子類無法繼承的,也就是說每一個類都有自己獨有的構造函數和析構函數。

(2)而由于父類的析構函數為虛函數,所以子類會在所有屬性的前面形成虛表,而虛表內部存儲的就是父類的虛函數

即使子類也有虛函數,但是由于是單繼承,所以也只有一張虛表,這在上一篇博客多態中講到過。
執行 Base *b = new Der;之后b的最終形態

C++中的虛析構函數有什么用

(3)當delete父類的指針時,由于子類的析構函數與父類的析構函數構成多態,所以得先調動子類的析構函數;之所以再調動父類的析構函數,是因為delete的機制所引起的,delete 父類指針所指的空間,要調用父類的析構函數。


以上就是“C++中的虛析構函數有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注創新互聯行業資訊頻道。


網頁標題:C++中的虛析構函數有什么用-創新互聯
轉載注明:http://m.jcarcd.cn/article/ccijoo.html
主站蜘蛛池模板: 日本网站在线看 | 国产午夜男女在线 | 国产在线v | 午夜美女久大黄老师 | 日韩午夜在线观看 | 国产尤物| 午夜偷拍精品福利 | 午夜在线视频影院 | 国产福利久 | 国内精品视频 | 精品欧美一区二 | 欧美亚洲日韩视频 | 国产喷潮在线播放一 | 蜜臀tv| 91最新欧美日韩 | 午夜探花 | 99热福利导航 | 福利片免费 | 97精品在线观看 | 福利精品视频导航 | 99热99然后 | 日本乱伦中文自拍 | 91青青青 | 国产精品卡一区二区 | 青青草91| 成人影院免费观看 | 岛国成人免费大片在 | 日本秋霞免费 | 午夜看片a福利 | 福利导航视 | 黑人操中国女人 | 91精品视频免费看 | 国产大片线上 | 国产在线播放免费 | 动漫一区二区 | 人人爰人人人人人鲁 | 国产最新进精品视频 | 日韩精品suv | 97在线视频人 | 97视频在线 | 九九九亚洲精品 |