成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++基礎(chǔ)之析構(gòu)函數(shù)的介紹

開(kāi)發(fā) 后端
本文介紹的是C++程序設(shè)計(jì)語(yǔ)言中的析構(gòu)函數(shù),對(duì)于析構(gòu)函數(shù)而言,我想我們并不陌生。希望對(duì)你有幫助,一起來(lái)看。

析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對(duì)象脫離其作用域時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來(lái)做“清理善后” 的工作(例如在建立對(duì)象時(shí)用new開(kāi)辟了一片內(nèi)存空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。

前面的一些例子都沒(méi)有說(shuō)明析構(gòu)函數(shù),這是因?yàn)樗玫降念?lèi)在結(jié)束時(shí)不需要做特別的清理工作。下面的程序給出了一新的Date類(lèi),其中包括一個(gè)字符串指針,用來(lái)表示月份。

  1. #include \"iostream.h\"  
  2. #include \"string.h\"  
  3.  
  4. class Date  
  5. {  
  6. int mo,da,yr;  
  7. char *month;  
  8. public:  
  9. Date(int m=0, int d=0, int y=0);  
  10. ~Date();  
  11. void display() const;  
  12. };  
  13.  
  14. Date::Date(int m,int d,int y)  
  15. {  
  16. static char *mos[] =  
  17. {  
  18. \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",  
  19. \"July\",\"August\",\"September\",\"October\",\"November\",\"December\" 
  20. };  
  21. mo=m; da=d; yr=y;  
  22. if(m!=0)  
  23. {  
  24. month=new char[strlen(mos[m-1])+1];  
  25. strcpy(month, mos[m-1]);  
  26. }  
  27. else month = 0;  
  28. }  
  29.  
  30. Date::~Date()  
  31. {  
  32. delete [] month;  
  33. }  
  34.  
  35. void Date::display() const 
  36. {  
  37. if(month!=0) cout<<month<<\' \'<<da<<\',\'<<yr;  
  38. }  
  39.  
  40. int main()  
  41. {  
  42. Date birthday(8,11,1979);  
  43. birthday.display();  
  44. return 0;  

在Date對(duì)象的構(gòu)造函數(shù)中,首先用new運(yùn)算符為字符串month動(dòng)態(tài)分配了內(nèi)存,然后從內(nèi)部數(shù)組中把月份的名字拷貝給字符串指針month。
析構(gòu)函數(shù)在刪除month指針時(shí),可能會(huì)出現(xiàn)一些問(wèn)題。當(dāng)然從這個(gè)程序本身來(lái)看,沒(méi)什么麻煩;但是從設(shè)計(jì)一個(gè)類(lèi)的角度來(lái)看,當(dāng)Date類(lèi)用于賦值時(shí),就會(huì)出現(xiàn)問(wèn)題。假設(shè)上面的main()修改為“

  1. int main()  
  2. {  
  3. Date birthday(8,11,1979);  
  4.  
  5. Date today;  
  6. today=birthday;  
  7.  
  8. birthday.display();  
  9. return 0;  

這會(huì)生成一個(gè)名為today的空的Date型變量,并且把birthday值賦給它。如果不特別通知編譯器,它會(huì)簡(jiǎn)單的認(rèn)為類(lèi)的賦值就是成員對(duì)成員的拷貝。在上面的程序中,變量birthday有一個(gè)字符型指針month,并且在構(gòu)造函數(shù)里用new運(yùn)算符初始化過(guò)了。當(dāng)birthday離開(kāi)其作用域時(shí),析構(gòu)函數(shù)會(huì)調(diào)用delete運(yùn)算符來(lái)釋放內(nèi)存。但同時(shí),當(dāng)today離開(kāi)它的作用域時(shí),析構(gòu)函數(shù)同樣會(huì)對(duì)它進(jìn)行釋放操作,而today里的month指針是birthday里的month指針的一個(gè)拷貝。析構(gòu)函數(shù)對(duì)同一指針進(jìn)行了兩次刪除操作,這會(huì)帶來(lái)不可預(yù)知的后果。

如果假設(shè)today是一個(gè)外部變量,而birthday是一個(gè)自變量。當(dāng)birthday離開(kāi)其作用域時(shí),就已經(jīng)把對(duì)象today里的month指針刪除了。顯然這也是不正確的。
再假設(shè)有兩個(gè)初始化的Date變量,把其中一個(gè)的值賦值給另一個(gè):

  1. Date birthday(8,11,1979);  
  2. Date today(12,29,2003);  
  3. today=birthday; 

問(wèn)題就更復(fù)雜了,當(dāng)這兩個(gè)變量離開(kāi)作用域時(shí),birthday中的month的值已經(jīng)通過(guò)賦值傳遞給了today。而today中構(gòu)造函數(shù)用new運(yùn)算符給month的值卻因?yàn)橘x值被覆蓋了。這樣,birthday中的month被刪除了兩次,而today中month卻沒(méi)有被刪除掉。

希望以上內(nèi)容對(duì)析構(gòu)函數(shù)的介紹,能夠給你帶來(lái)幫助。

責(zé)任編輯:于鐵 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2025-02-18 00:08:00

代碼C++RAII

2010-02-04 16:39:26

C++析構(gòu)函數(shù)

2010-01-18 15:53:27

C++析構(gòu)函數(shù)

2010-02-05 13:35:19

C++虛析構(gòu)函數(shù)

2024-12-19 14:42:15

C++內(nèi)存泄漏內(nèi)存管理

2009-08-14 17:24:28

C#構(gòu)造函數(shù)和析構(gòu)函數(shù)

2011-07-14 23:27:05

C++引用

2009-07-30 15:24:13

C#析構(gòu)函數(shù)C#構(gòu)造函數(shù)

2009-09-03 13:14:55

C#構(gòu)造函數(shù)C#析構(gòu)函數(shù)

2011-06-15 09:47:14

C++

2011-07-14 17:17:21

C++指針

2011-07-14 17:02:09

C++指針

2024-12-11 16:00:00

C++函數(shù)編譯器

2021-12-11 19:02:03

函數(shù)C++對(duì)象

2010-01-20 14:25:56

函數(shù)調(diào)用

2010-07-20 09:52:27

Perl構(gòu)造函數(shù)

2025-04-11 07:50:00

虛析構(gòu)函數(shù)C++開(kāi)發(fā)

2011-06-17 16:09:04

freadfwrite

2010-01-25 10:10:42

C++函數(shù)參數(shù)

2011-07-15 00:47:13

C++多態(tài)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产一级电影在线观看 | 先锋资源吧| 欧美在线观看免费观看视频 | 国产成人精品免高潮在线观看 | 日韩精品久久 | 亚洲精品一区二区三区蜜桃久 | 欧美亚洲一区二区三区 | 亚洲久视频 | 国产精品一区二区不卡 | 日韩电影免费在线观看中文字幕 | 日韩国产精品一区二区三区 | 亚洲国产精久久久久久久 | 亚洲国产aⅴ精品 | 久久久久无码国产精品一区 | 日韩aⅴ在线观看 | 色五月激情五月 | 在线日韩 | 色橹橹欧美在线观看视频高清 | 亚洲视频在线免费观看 | 欧美在线一区二区三区四区 | 久久久久久久一级 | 亚洲毛片在线观看 | 久久一二 | 性色av网站 | 国产精品午夜电影 | 日日噜 | 欧美一区二区三区四区视频 | 亚洲成人av在线播放 | 日韩精品视频在线 | 亚洲福利视频一区二区 | 久久精品国产99国产精品 | 国产精品一区二区三级 | 欧美精品一区二区三区一线天视频 | 精品欧美一区免费观看α√ | 久久久久久国产精品 | 日本特黄a级高清免费大片 国产精品久久性 | 欧美日韩精品一区二区天天拍 | av黄色免费在线观看 | 一区在线播放 | 亚洲精品亚洲人成人网 | 羞羞网站在线观看 |