国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

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

《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)存泄露。(因?yàn)閯討B(tài)編譯,在運(yùn)行時會檢查有無派生類對象重載本函數(shù),有則調(diào)用之。)

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

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

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