久久精品国产清自在天天线_日韩国产欧美系列_亚洲天堂影视在线观看_91在线艹亚洲无码午夜_日本写真高清视频免费网站网_亚州无码大尺度另类_高跟翘臀老师后进式视频午夜_久久精品国产亚洲AV热黑人_国产另ts另类人妖_丁香五月 开心五月 激情五月

Hi,歡迎來到嵌入式培訓(xùn)高端品牌 - 華清遠見教育科技集團<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠見教育科技集團 > 嵌入式學(xué)習(xí) > 講師博文 > 關(guān)于C++中的虛析構(gòu)函數(shù)
關(guān)于C++中的虛析構(gòu)函數(shù)
時間:2017-01-05作者:華清遠見

《effective C++》中的條款14:確定基類有虛析構(gòu)函數(shù)。也就是說,如果某個類要作為基類來使用,一般使用虛析構(gòu)函數(shù)�?聪旅娴睦樱�

class A{
        public:
                A(){
                        strA = new char[10]; 
                        strcpy(strA, "abc");
                }
                virtual ~A(){
                cout<<"~A() " <<strA<<endl;        delete []strA;
                }
        private:
                char* strA;
        };

class B: public A
        {
        public:
                B(){
                        strB = new char[10]; 
                        strcpy(strB, "def"); 
                }
                ~B(){
                        cout<<"~B() " <<strB<<endl;
                        delete []strB;
                }
         private: 
                char* strB;
        };

測試:

A *p = new B; delete p;

代碼的輸出結(jié)果:

~A()

我們發(fā)現(xiàn)B類的析構(gòu)函數(shù)沒有調(diào)用,導(dǎo)致內(nèi)存泄露。(因為動態(tài)編譯,在運行時會檢查有無派生類對象重載本函數(shù),有則調(diào)用之。)

當(dāng)我們可能通過基類指針刪除派生類對象時,并且被析構(gòu)的對象是有重要的析構(gòu)函數(shù)的派生類的對象,就需要讓基類的析構(gòu)函數(shù)成為虛擬的。

當(dāng)一個類不準(zhǔn)備作為基類使用時,使析構(gòu)函數(shù)為虛函數(shù)一般是個壞主意。因為當(dāng)類里面有虛函數(shù)的時候,編譯器會給類添加一個虛函數(shù)表,里面來存放虛函數(shù)指針,這樣就會增加類的存儲空間。所以,只有類要作為基類來使用時,才把析構(gòu)函數(shù)寫成虛函數(shù)。

發(fā)表評論
評論列表(網(wǎng)友評論僅供網(wǎng)友表達個人看法,并不表明本站同意其觀點或證實其描述)