小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

基類的析構(gòu)函數(shù)為什么要設(shè)成虛函數(shù) - so true - BlogJava

 jason zhai 2010-09-11

基類的析構(gòu)函數(shù)為什么要設(shè)成虛函數(shù)

#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 ;  
}
輸出結(jié)果:
A()
B()
~A()
============================================================
在基類的析構(gòu)函數(shù)前添加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 ;  
}

輸出結(jié)果:
A()
B()
~B()
~A()
=================================================================
如果不是在基類的析構(gòu)函數(shù)前添加virtual,而是在子類的析構(gòu)函數(shù)前添加virtual,則編譯不會(huì)出錯(cuò),但是運(yùn)行會(huì)出錯(cuò)。如果在此基礎(chǔ)上再把 “delete p;”這句話給注釋了,那依然不會(huì)運(yùn)行出錯(cuò),不過這就不符合變成規(guī)范了,只要是我們自己用new創(chuàng)建的東西,我們就必須在適當(dāng)?shù)奈恢蔑@示的調(diào)用 delete來刪除。
=================================================================
如果再添加一個(gè)中間類,代碼如下:
#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 ;  
}
輸出結(jié)果為:
A()
B()
C()
~C()
~B()
~A()
析構(gòu)函數(shù)前添加virtual,必須要在最最根上的基類的析構(gòu)函數(shù)前添加,不能再B類或C類的析構(gòu)函數(shù)前添加,只要A類的析構(gòu)函數(shù)添加了virtual,從A類派生的類都不必在自己的析構(gòu)函數(shù)前添加virtual了。
所以如果沒有虛析構(gòu)函數(shù)的話, 那么子類中特有的部分就不會(huì)被釋放, 造成"經(jīng)典"的釋放一半, 泄露一半的內(nèi)存泄露.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多