<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    基類的析構函數為什么要設成虛函數

    #include <iostream.h>

    class A
    {
    public:
     A(){cout<<"A()\n";}
     ~A(){cout<<"~A()\n";}
     
    };

    class B : public A
    {
    public:
     B(){cout<<"B()\n";}
     ~B(){cout<<"~B()\n";}
    };

    void main()
    {
     A * p = new B();
     delete p ;  
    }
    輸出結果:
    A()
    B()
    ~A()
    ============================================================
    在基類的析構函數前添加virtual改編后的代碼:
    #include <iostream.h>

    class A
    {
    public:
     A(){cout<<"A()\n";}
     virtual ~A(){cout<<"~A()\n";}
     
    };

    class B : public A
    {
    public:
     B(){cout<<"B()\n";}
     ~B(){cout<<"~B()\n";}
    };

    void main()
    {
     A * p = new B();
     delete p ;  
    }

    輸出結果:
    A()
    B()
    ~B()
    ~A()
    =================================================================
    如果不是在基類的析構函數前添加virtual,而是在子類的析構函數前添加virtual,則編譯不會出錯,但是運行會出錯。如果在此基礎上再把“delete p;”這句話給注釋了,那依然不會運行出錯,不過這就不符合變成規范了,只要是我們自己用new創建的東西,我們就必須在適當的位置顯示的調用delete來刪除。
    =================================================================
    如果再添加一個中間類,代碼如下:
    #include <iostream.h>
    #include <windows.h>

    class A
    {
    public:
     A(){cout<<"A()\n";}
     virtual ~A(){cout<<"~A()\n";}
    };

    class B : public A
    {
    public:
     B(){cout<<"B()\n";}
     virtual ~B(){cout<<"~B()\n";}
    };

    class C : public B
    {
    public:
     C(){cout<<"C()\n";}
     ~C(){cout<<"~C()\n";}
    };

    void main()
    {
     A * p = new C();
     delete p ;  
    }
    輸出結果為:
    A()
    B()
    C()
    ~C()
    ~B()
    ~A()
    析構函數前添加virtual,必須要在最最根上的基類的析構函數前添加,不能再B類或C類的析構函數前添加,只要A類的析構函數添加了virtual,從A類派生的類都不必在自己的析構函數前添加virtual了。
    所以如果沒有虛析構函數的話, 那么子類中特有的部分就不會被釋放, 造成"經典"的釋放一半, 泄露一半的內存泄露.

    posted on 2008-02-23 19:17 so true 閱讀(1788) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 亚洲精品国产高清不卡在线| 又色又污又黄无遮挡的免费视 | 亚洲AV成人一区二区三区观看| 最近中文字幕大全中文字幕免费| 亚洲av无码片在线播放| 丁香花在线视频观看免费| 亚洲色欲久久久综合网东京热| 国产精品1024在线永久免费 | 亚洲国产精品成人精品无码区| 成年女人A毛片免费视频| AV在线亚洲男人的天堂| a在线视频免费观看| 久久久久亚洲av无码专区喷水| 99国产精品免费观看视频| 亚洲国产精品久久网午夜| 国产卡二卡三卡四卡免费网址| 亚洲欧美日韩国产精品一区| 伊人久久亚洲综合影院| 成人免费ā片在线观看| 久久久无码精品亚洲日韩蜜臀浪潮| 最近中文字幕2019高清免费| 亚洲一线产品二线产品| 午夜a级成人免费毛片| 国产成人亚洲精品蜜芽影院| 亚洲乱码一区二区三区在线观看 | 亚洲精品无码久久久久YW| 国产在线观看免费完整版中文版| 日本一区二区三区免费高清在线| 亚洲伊人久久大香线蕉综合图片| 日日麻批免费40分钟无码| 亚洲色大成网站www尤物| 国产精品亚洲二区在线观看| 久久99国产乱子伦精品免费| 亚洲乱码中文字幕在线| 国产成人亚洲影院在线观看| 99re在线免费视频| 久久亚洲色WWW成人欧美| 亚洲AV综合色一区二区三区| 成年人在线免费观看| 91免费福利视频| 日韩亚洲国产综合高清|