欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析C++中虛析構(gòu)函數(shù)的作用

 更新時(shí)間:2013年05月29日 10:23:15   作者:  
本篇文章是對C++中虛析構(gòu)函數(shù)的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
我們知道,用C++開發(fā)的時(shí)候,用來做基類的類的析構(gòu)函數(shù)一般都是虛函數(shù)。可是,為什么要這樣做呢?下面用一個(gè)小例子來說明:   
有下面的兩個(gè)類:
復(fù)制代碼 代碼如下:

class ClxBase
{
public:
    ClxBase() {};
    virtual ~ClxBase() {};
    virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };
};
class ClxDerived : public ClxBase
{
public:
    ClxDerived() {};
    ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; };
    void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
};

代碼
復(fù)制代碼 代碼如下:

ClxBase *pTest = new ClxDerived;
pTest->DoSomething();
delete pTest;

的輸出結(jié)果是:
Do something in class ClxDerived!
Output from the destructor of class ClxDerived!
這個(gè)很簡單,非常好理解。
但是,如果把類ClxBase析構(gòu)函數(shù)前的virtual去掉,那輸出結(jié)果就是下面的樣子了:
Do something in class ClxDerived!
也就是說,類ClxDerived的析構(gòu)函數(shù)根本沒有被調(diào)用!一般情況下類的析構(gòu)函數(shù)里面都是釋放內(nèi)存資源,而析構(gòu)函數(shù)不被調(diào)用的話就會造成內(nèi)存泄漏。我想所有的C++程序員都知道這樣的危險(xiǎn)性。當(dāng)然,如果在析構(gòu)函數(shù)中做了其他工作的話,那你的所有努力也都是白費(fèi)力氣。

所以,文章開頭的那個(gè)問題的答案就是--這樣做是為了當(dāng)用一個(gè)基類的指針刪除一個(gè)派生類的對象時(shí),派生類的析構(gòu)函數(shù)會被調(diào)用。

當(dāng)然,并不是要把所有類的析構(gòu)函數(shù)都寫成虛函數(shù)。因?yàn)楫?dāng)類里面有虛函數(shù)的時(shí)候,編譯器會給類添加一個(gè)虛函數(shù)表,里面來存放虛函數(shù)指針,這樣就會增加類的存儲空間。所以,只有當(dāng)一個(gè)類被用來作為基類的時(shí)候,才把析構(gòu)函數(shù)寫成虛函數(shù)。

相關(guān)文章

  • C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)

    C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)

    這篇文章主要介紹了C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++面試八股文之左值與右值

    C++面試八股文之左值與右值

    簡單來說,左值就是可以使用&符號取地址的值,而右值一般不可以使用&符號取地址,這篇文章主要來和大家講講面試中左值與右值??嫉闹R點(diǎn),需要的可以參考一下
    2023-06-06
  • C++ 超詳細(xì)快速掌握二叉搜索樹

    C++ 超詳細(xì)快速掌握二叉搜索樹

    從這篇博客開始,我就要和大家介紹有關(guān)二叉搜索樹的知識,它還衍生出了兩棵樹——AVL樹和紅黑樹,在后面兩篇博客我都會介紹。今天先從二叉搜索樹開始引入
    2022-03-03
  • 如何使用C語言將數(shù)字、字符等數(shù)據(jù)寫入、輸出到文本文件中

    如何使用C語言將數(shù)字、字符等數(shù)據(jù)寫入、輸出到文本文件中

    在分析數(shù)據(jù)時(shí),首先要解決數(shù)據(jù)的保存問題,下面這篇文章主要給大家介紹了關(guān)于如何使用C語言將數(shù)字、字符等數(shù)據(jù)寫入、輸出到文本文件中的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • c++異常處理機(jī)制示例及詳細(xì)講解

    c++異常處理機(jī)制示例及詳細(xì)講解

    本篇文章主要是對c++異常處理機(jī)制示例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • C/C++?Qt?數(shù)據(jù)庫與TreeView組件綁定詳解

    C/C++?Qt?數(shù)據(jù)庫與TreeView組件綁定詳解

    本篇文章主要介紹了QT數(shù)據(jù)庫與View組件的綁定,通過數(shù)據(jù)庫與組件關(guān)聯(lián)可實(shí)現(xiàn)動態(tài)展示數(shù)據(jù)庫中的表記錄。感興趣的小伙伴可以了解一下
    2021-12-12
  • C++簡單又輕松的講解類和對象中友元函數(shù)

    C++簡單又輕松的講解類和對象中友元函數(shù)

    采用類的機(jī)制后實(shí)現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時(shí)需要定義一些函數(shù),這些函數(shù)不是類的一部分,但又需要頻繁地訪問類的數(shù)據(jù)成員,這時(shí)可以將這些函數(shù)定義為該類的友元函數(shù)
    2022-06-06
  • C++三色球問題描述與算法分析

    C++三色球問題描述與算法分析

    這篇文章主要介紹了C++三色球問題描述與算法分析,結(jié)合注釋形式詳細(xì)講述了三色球問題的描述與相應(yīng)的算法設(shè)計(jì)思路,并給出了相關(guān)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-05-05
  • 簡單說說STL的內(nèi)存管理

    簡單說說STL的內(nèi)存管理

    <STL 源碼剖析>將其描述為空間配置器,理由是allocator可以將其它存儲介質(zhì)(例如硬盤)做為stl 容器的存儲空間。由于內(nèi)存是allocator管理的主要部分,因此,本文以STL內(nèi)存管理為出發(fā)點(diǎn)介紹allocator
    2013-09-09
  • C++中strtok()函數(shù)的用法介紹

    C++中strtok()函數(shù)的用法介紹

    以下是對C++中strtok()函數(shù)的使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論