C++的虛析構(gòu)詳解及實例代碼
C++的虛析構(gòu)
最近準(zhǔn)備復(fù)習(xí)一遍所有的知識點(diǎn),先從基礎(chǔ)開始做起,用幾分鐘寫個繼承和析構(gòu)吧。
父類為A,子類為B,代碼如下:
class A
{
public:
A()
{
cout << "構(gòu)造A"<< endl;
}
~A()
{
cout << "析構(gòu)A" << endl;
}
}
class B:public A
{
public:
B()
{
cout << "構(gòu)造B"<< endl;
}
~B()
{
cout << "析構(gòu)B"<< endl;
}
}
這個時候在main函數(shù)里,
定義一個A的對象,A a;運(yùn)行輸出結(jié)果為:構(gòu)造A 析構(gòu)A。
定義一個B的對象, B b;運(yùn)行的輸出結(jié)果為:構(gòu)造B 析構(gòu)B。
定義一個A的指針,指向B。A *P = new b; 運(yùn)行輸出結(jié)果為:構(gòu)造A 構(gòu)造B.這個時候很多人就容易出問題了,為啥沒調(diào)用析構(gòu)呢,這個也是經(jīng)常遇到的問題,最簡單也是最容易遺忘的。new出來的對象沒有刪,還有寫一行代碼 delete p;這個時候的運(yùn)行輸出結(jié)果為:構(gòu)造A 構(gòu)造B 析構(gòu)A。又出現(xiàn)問題了,B的析構(gòu)怎么沒走,這個時候需要一用虛析構(gòu)這個概念,虛析構(gòu)的功能:父類的析構(gòu)寫成虛析構(gòu),在刪除父類的指針的時候,可以刪除子類的對象,避免內(nèi)存泄漏。
具體操作就是把上面代碼的第八行,前面加一個virtual。這個時候再運(yùn)行輸出結(jié)果為:構(gòu)造A 構(gòu)造B 析構(gòu)B 析構(gòu)A。注意這里也可以看出調(diào)用順序,先走父類的構(gòu)造,然后子類的構(gòu)造。先走子類的析構(gòu),最后走父類的析構(gòu)。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
上一篇:C語言實現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))
欄 目:C語言
下一篇:淺談使用Rapidxml 庫遇到的問題和分析過程(分享)
本文標(biāo)題:C++的虛析構(gòu)詳解及實例代碼
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1565.html
您可能感興趣的文章
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 01-10c語言求1+2+...+n的解決方法
- 01-10求子數(shù)組最大和的解決方法詳解
- 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
- 01-10深入二叉樹兩個結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計- 解析最少換車次數(shù)的問題詳解
- 01-10c語言 跳臺階問題的解決方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改


