亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

delete 和 delete []的真正區別

2019-11-14 09:41:35
字體:
來源:轉載
供稿:網友

c++中對new申請的內存的釋放方式有delete和delete[兩種方式,到底這兩者有什么區別呢?

1.我們通常從教科書上看到這樣的說明:delete 釋放new分配的單個對象指針指向的內存delete[] 釋放new分配的對象數組指針指向的內存那么,按照教科書的理解,我們看下下面的代碼:int *a = new int[10];delete a;        //方式1delete [] a;     //方式2肯定會有很多人說方式1肯定存在內存泄漏,是這樣嗎?

(1). 針對簡單類型 使用new分配后的不管是數組還是非數組形式內存空間用兩種方式均可 如:   int *a = new int[10];   delete a;   delete [] a;   此種情況中的釋放效果相同,原因在于:分配簡單類型內存時,內存大小已經確定,系統可以記憶并且進行管理,在析構時,系統并不會調用析構函數,   它直接通過指針可以獲取實際分配的內存空間,哪怕是一個數組內存空間(在分配過程中 系統會記錄分配內存的大小等信息,此信息保存在結構體_CrtMemBlockHeader中,   具體情況可參看VC安裝目錄下CRT/SRC/DBGDEL.cpp)

(2). 針對類Class,兩種方式體現出具體差異    當你通過下列方式分配一個類對象數組:   class A   {   PRivate:      char *m_cBuffer;      int m_nLen;   public:      A(){ m_cBuffer = new char[m_nLen]; }      ~A() { delete [] m_cBuffer; }   };   A *a = new A[10];   delete a;         //僅釋放了a指針指向的全部內存空間 但是只調用了a[0]對象的析構函數 剩下的從a[1]到a[9]這9個用戶自行分配的m_cBuffer對應內存空間將不能釋放 從而造成內存泄漏   delete [] a;      //調用使用類對象的析構函數釋放用戶自己分配內存空間并且   釋放了a指針指向的全部內存空間所以總結下就是,如果ptr代表一個用new申請的內存返回的內存空間地址,即所謂的指針,那么:   delete   ptr   代表用來釋放內存,且只用來釋放ptr指向的內存。    delete[]   rg   用來釋放rg指向的內存,!!還逐一調用數組中每個對象的destructor??!   對于像int/char/long/int*/struct等等簡單數據類型,由于對象沒有destructor,所以用delete 和delete [] 是一樣的!但是如果是C++對象數組就不同了!

關于 new[] 和 delete[],其中又分為兩種情況:(1) 為基本數據類型分配和回收空間;(2) 為自定義類型分配和回收空間。 對于 (1),上面提供的程序已經證明了 delete[] 和 delete 是等同的。但是對于 (2),情況就發生了變化。

我們來看下面的例子,通過例子的學習了解C++中的delete和delete[]的使用方法

#include <iostream>using namespace std;/////////class Babeclass Babe{public:    Babe()    {        cout << /"Create a Babe to talk with me/" << endl;    }    ~Babe()    {        cout << /"Babe don/'t Go away,listen to me/" << endl;    }};//////////main functionint main(){    Babe* pbabe = new Babe[3];    delete pbabe;    pbabe = new Babe[3];    delete pbabe[];    return 0;}

結果是:

Create a babe to talk with me

Create a babe to talk with me

Create a babe to talk with me

Babe don/'t go away,listen to me

Create a babe to talk with me

Create a babe to talk with me

Create a babe to talk with me

Babe don/'t go away,listen to me

Babe don/'t go away,listen to me

Babe don/'t go away,listen to me

=================================================

大家都看到了,只使用delete的時候只出現一個 Babe don/'t go away,listen to me,而使用delete[]的時候出現3個 Babe don/'t go away,listen to me。不過不管使用delete還是delete[]那三個對象的在內存中都被刪除,既存儲位置都標記為可寫,但是使用delete的時候只調用了pbabe[0]的析構函數,而使用了delete[]則調用了3個Babe對象的析構函數。你一定會問,反正不管怎樣都是把存儲空間釋放了,有什么區別。答:關鍵在于調用析構函數上。此程序的類沒有使用操作系統的系統資源(比如:Socket、File、Thread等),所以不會造成明顯惡果。如果你的類使用了操作系統資源,單純把類的對象從內存中刪除是不妥當的,因為沒有調用對象的析構函數會導致系統資源不被釋放,如果是Socket則會造成Socket資源不被釋放,最明顯的就是端口號不被釋放,系統最大的端口號是65535(216 _ 1,因為還有0),如果端口號被占用了,你就不能上網了,呵呵。如果File資源不被釋放,你就永遠不能修改這個文件,甚至不能讀這個文件(除非注銷或重器系統)。如果線程不被釋放,這它總在后臺運行,浪費內存和CPU資源。這些資源的釋放必須依靠這些類的析構函數。所以,在用這些類生成對象數組的時候,用delete[]來釋放它們才是王道。而用delete來釋放也許不會出問題,也許后果很嚴重,具體要看類的代碼了.


上一篇:13.2.1

下一篇:ctags的使用

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
xxav国产精品美女主播| 国产精品久久久久久久久久免费| 日韩视频免费在线观看| 91国偷自产一区二区三区的观看方式| 亚洲色图五月天| 欧美大全免费观看电视剧大泉洋| 日韩高清a**址| y97精品国产97久久久久久| 国产成+人+综合+亚洲欧美丁香花| 日本高清不卡的在线| 欧美精品一区在线播放| 欧美久久精品一级黑人c片| 欧美国产日韩一区二区在线观看| 精品久久久久人成| 久久精品视频va| 成人福利网站在线观看| 国产精品久久久久秋霞鲁丝| 国产美女精品视频免费观看| 亚洲九九九在线观看| 亚洲人成在线电影| 久久精品国产v日韩v亚洲| 国产欧美在线播放| 日韩欧美在线第一页| 欧美日韩成人在线播放| 久久久99久久精品女同性| 热re91久久精品国99热蜜臀| 成人久久精品视频| 国模精品视频一区二区| www.精品av.com| 91精品国产综合久久香蕉最新版| 九九热这里只有精品免费看| 国产热re99久久6国产精品| 日韩欧美中文免费| 亚洲黄色有码视频| 国产99久久久欧美黑人| 中文.日本.精品| 欧美亚洲第一页| 国产97在线|亚洲| 国产欧美日韩中文字幕| 国产欧美日韩中文字幕在线| 欧美成人精品一区二区| 欧美多人爱爱视频网站| 亚洲精品一区二三区不卡| 538国产精品视频一区二区| 国产精品白嫩初高中害羞小美女| 精品国产鲁一鲁一区二区张丽| 96sao精品视频在线观看| 欧美多人乱p欧美4p久久| 精品国产乱码久久久久酒店| 精品亚洲一区二区三区在线观看| 国产精品久久综合av爱欲tv| 国产999精品| 国产精品中文字幕在线观看| 欧美国产精品人人做人人爱| 亚洲国产第一页| 久久中国妇女中文字幕| 亚洲第一精品电影| 97香蕉超级碰碰久久免费的优势| 最新的欧美黄色| 精品国产乱码久久久久久虫虫漫画| 97视频在线播放| 国产欧美日韩丝袜精品一区| 成人午夜在线观看| 国产精品美女无圣光视频| 欧美xxxx做受欧美.88| 91免费精品国偷自产在线| 成人国产精品一区| 欧美亚洲午夜视频在线观看| 成人久久一区二区三区| 欧美高清videos高潮hd| 精品成人在线视频| 国产一区二区三区久久精品| 色偷偷91综合久久噜噜| 两个人的视频www国产精品| 成人福利视频在线观看| 久久久久久久久亚洲| 午夜欧美不卡精品aaaaa| 国产精品黄视频| 伊人伊成久久人综合网站| 国产精品jvid在线观看蜜臀| 久久精品2019中文字幕| 亚洲精品自在久久| 成人精品福利视频| 久久免费福利视频| 国产精品v日韩精品| 成人国产精品日本在线| 亚洲成人免费在线视频| 欧美电影免费观看高清完整| 91亚洲午夜在线| 色偷偷88888欧美精品久久久| 久久免费成人精品视频| 亚洲国产中文字幕在线观看| 国产精品69久久久久| 国产精品一区二区电影| 欧美一级电影免费在线观看| 777国产偷窥盗摄精品视频| 91在线高清视频| 69av在线视频| 久久精品2019中文字幕| 亚洲综合一区二区不卡| 97国产真实伦对白精彩视频8| 成人久久久久爱| 亚洲欧美第一页| 草民午夜欧美限制a级福利片| 久久亚洲欧美日韩精品专区| 日韩最新在线视频| 精品福利免费观看| 久久久精品国产网站| 欧美激情一区二区三级高清视频| 啪一啪鲁一鲁2019在线视频| 色诱女教师一区二区三区| 国产91对白在线播放| 国产精品综合不卡av| 欧美午夜电影在线| 97超级碰碰人国产在线观看| 亚洲国产黄色片| 久久亚洲综合国产精品99麻豆精品福利| 精品国产视频在线| 国产成人亚洲综合青青| 亚洲伊人第一页| 国产午夜精品美女视频明星a级| 日韩网站在线观看| 久久精品成人一区二区三区| 欧美激情国产日韩精品一区18| 亚洲伊人第一页| 国模gogo一区二区大胆私拍| 精品久久久久久久久久| 久久久久久久久久国产精品| 成人黄色av播放免费| 国产成人午夜视频网址| www.欧美精品一二三区| 亚洲国产精品嫩草影院久久| 久久亚洲精品小早川怜子66| 欧美日韩中文字幕综合视频| 最近2019年日本中文免费字幕| 欧美日韩亚洲国产一区| 国产91在线视频| 久久精品视频播放| 精品亚洲永久免费精品| 91在线网站视频| 欧美性生交xxxxxdddd| 欧美国产中文字幕| 国产精品精品一区二区三区午夜版| 在线观看国产成人av片| 国产成人福利夜色影视| 美女999久久久精品视频| 97在线精品视频| 欧美激情亚洲自拍| 亚洲精品国产综合区久久久久久久| 精品欧美aⅴ在线网站| 国产成人avxxxxx在线看| 中文字幕在线日韩| 精品成人国产在线观看男人呻吟| 亚洲毛片在线免费观看| 青青草99啪国产免费| 91牛牛免费视频| 亚洲国产精品大全| 91精品国产高清自在线看超| 久久五月天综合| 黄色成人在线免费| 91精品美女在线| 日韩电影中文字幕一区| 色综合久久88色综合天天看泰| 亚洲欧美中文日韩在线|