日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C++中析构函数

發(fā)布時(shí)間:2024/9/27 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中析构函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

析構(gòu)函數(shù):
1.析構(gòu)函數(shù)不能被重載;
2.析構(gòu)函數(shù)可以是虛函數(shù);
3.析構(gòu)函數(shù)沒(méi)有參數(shù),沒(méi)有返回值;
4.當(dāng)類(lèi)對(duì)象的生命周期結(jié)束,系統(tǒng)會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù);
5.若沒(méi)有顯式的析構(gòu)函數(shù),系統(tǒng)會(huì)調(diào)用默認(rèn)的析構(gòu)函數(shù);
下面記錄一下一個(gè)小示例,目的是說(shuō)明虛析構(gòu)函數(shù)的必要性。若析構(gòu)函數(shù)不是虛函數(shù),會(huì)發(fā)生什么,vs2010下創(chuàng)建控制臺(tái)輸出程序,下面看代碼,以及運(yùn)行實(shí)例;
classObject.cpp

#include "stdafx.h" #include <iostream> using namespace std;class Base { public:Base(){cout<<"構(gòu)造函數(shù)Base()"<<endl;};~Base(){cout<<"析構(gòu)函數(shù)~Base()"<<endl;}//基類(lèi)的析構(gòu)函數(shù)不是虛析構(gòu)函數(shù) protected: private: };class Inherit:public Base { public:Inherit(){cout<<"構(gòu)造函數(shù)Inherit()"<<endl;}~Inherit(){cout<<"析構(gòu)函數(shù)Inherit()"<<endl;} protected: private: };int _tmain(int argc, _TCHAR* argv[]) {Base *base = new Inherit;delete base;//下面3行代碼是一個(gè)小插曲,作者記錄下來(lái)鞏固基礎(chǔ)int a[] = {12,13,23,4,5};cout<<"sizeof(*a)="<<sizeof(*a)<<endl;cout<<"*a="<<*a<<endl;//*a是數(shù)組a的第一個(gè)元素,sizeof(*a)即整型的大小 4system("pause");return 0; }

運(yùn)行上面的代碼,控制臺(tái)輸出結(jié)果是:

可以看出析構(gòu)函數(shù)調(diào)用的時(shí)候只調(diào)用了,父類(lèi)的析構(gòu)函數(shù),沒(méi)有調(diào)用子類(lèi)的析構(gòu)函數(shù),即沒(méi)有釋放子類(lèi)的對(duì)象,無(wú)形中造成內(nèi)存泄漏,下面我們來(lái)將父類(lèi)的析構(gòu)函數(shù)定義為虛析構(gòu),即在父類(lèi)的析構(gòu)函數(shù)前加關(guān)鍵字virtual,將父類(lèi)析構(gòu)函數(shù)改為下面這樣,其它不變。

Base(){cout<<"析構(gòu)函數(shù)Base()"<<endl;}//基類(lèi)的析構(gòu)函數(shù)是虛析構(gòu)函數(shù)

編譯運(yùn)行程序,結(jié)果如下:

總結(jié):當(dāng)一個(gè)類(lèi)作為父類(lèi)的時(shí)候,最好將此類(lèi)的析構(gòu)函數(shù)定義為虛析構(gòu)函數(shù)。

總結(jié)

以上是生活随笔為你收集整理的C++中析构函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。