歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

第七章-動(dòng)態(tài)內(nèi)存分配--C++程序設(shè)計(jì)-計(jì)算機(jī)等級(jí)考試教學(xué)課件

  • 資源ID:249799233       資源大?。?span id="vdks10k" class="font-tahoma">2.57MB        全文頁(yè)數(shù):33頁(yè)
  • 資源格式: PPT        下載積分:10積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

第七章-動(dòng)態(tài)內(nèi)存分配--C++程序設(shè)計(jì)-計(jì)算機(jī)等級(jí)考試教學(xué)課件

*,計(jì)算機(jī)基礎(chǔ)教研室,*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),第七章 動(dòng)態(tài)內(nèi)存分配,主講人:,XXX,電子郵件:,聯(lián)系電話:,2024/10/31,1,動(dòng)態(tài)內(nèi)存分配,本章首先介紹程序運(yùn)行時(shí),動(dòng)態(tài)內(nèi)存分配,(,dynamic memory allocation,)的概念與方法;再進(jìn)一步討論復(fù)制構(gòu)造函數(shù),.,7.1.1,自由存儲(chǔ)區(qū),內(nèi)存,的分配與釋放,7.1.2,自由存儲(chǔ)區(qū),對(duì)象,與構(gòu)造函數(shù),7.1.3,淺復(fù)制與深復(fù)制,2024/10/31,2,計(jì)算機(jī)基礎(chǔ)教研室,自由存儲(chǔ)區(qū)內(nèi)存分配,靜態(tài)存儲(chǔ)分配:,無(wú)論全局或局部變量,(,對(duì)象,),,編譯器在,編譯時(shí),都可以根據(jù)該變量,(,對(duì)象,),的類型知道所需內(nèi)存空間的大小,從而系統(tǒng)在適當(dāng)?shù)臅r(shí)候?yàn)樗鼈兎峙浯_定的存儲(chǔ)空間。尤其是數(shù)組。,動(dòng)態(tài)存儲(chǔ)分配:,有些操作對(duì)象只有在程序,運(yùn)行時(shí),才能確定,這樣編譯器在編譯時(shí)就無(wú)法為他們預(yù)定存儲(chǔ)空間,只能在程序運(yùn)行時(shí),系統(tǒng)根據(jù)運(yùn)行時(shí)的要求進(jìn)行內(nèi)存分配,稱為動(dòng)態(tài)存儲(chǔ)分配。動(dòng)態(tài)分配都在,自由存儲(chǔ)區(qū),中進(jìn)行。,2024/10/31,3,計(jì)算機(jī)基礎(chǔ)教研室,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,當(dāng)程序運(yùn)行到需要?jiǎng)討B(tài)分配變量或?qū)ο髸r(shí),必須向系統(tǒng),申請(qǐng)取得自由存儲(chǔ)區(qū),中的一塊所需大小的存貯空間,用于存貯該變量或?qū)ο?。?dāng)不再使用該變量或?qū)ο髸r(shí),也就是它的生命結(jié)束時(shí),要,顯式釋放,它所占用的存貯空間,這樣系統(tǒng)就能進(jìn)行再次分配,做到重復(fù)使用有限的資源。,動(dòng)態(tài)分配與釋放:,2024/10/31,4,計(jì)算機(jī)基礎(chǔ)教研室,一般定義變量和對(duì)象時(shí)要用標(biāo)識(shí)符命名,稱,命名對(duì)象,,而動(dòng)態(tài)的稱,無(wú)名對(duì)象,(,請(qǐng)注意與棧區(qū)中的臨時(shí)對(duì)象的區(qū)別,兩者完全不同:生命期不同,操作方法不同,臨時(shí)變量對(duì)程序員是透明的,),。,自由存儲(chǔ)區(qū),是不會(huì)自動(dòng)在分配時(shí)做初始化的(包括清零),所以必須用初始化式,(initializer),來(lái)顯式初始化。,無(wú)名對(duì)象:,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,2024/10/31,6,計(jì)算機(jī)基礎(chǔ)教研室,new,表達(dá)式的操作:,從自由存儲(chǔ)區(qū)分配對(duì)象,然后用括號(hào)中的值初始化該對(duì)象,。,分配對(duì)象時(shí),,new,表達(dá)式調(diào)用庫(kù)操作符,new,(),:,int,*pi=,new,int,(0);,pi,現(xiàn)在所指向的變量的存儲(chǔ)空間是由庫(kù)操作符,new,(),分配的,位于程序的自由存儲(chǔ)區(qū)中,并且該對(duì)象未命名。,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,2024/10/31,7,計(jì)算機(jī)基礎(chǔ)教研室,自由存儲(chǔ)區(qū),i,演示:,用初始化式,(initializer),來(lái)顯式初始化,int,*pi=,new,int,(0);,當(dāng),pi,生命周期結(jié)束時(shí),,必須釋放,pi,所指向的目標(biāo):,delete,pi;,注意這時(shí)釋放了,pi,所指的目標(biāo)的內(nèi)存空間,也就是撤銷(xiāo)了該目標(biāo),稱動(dòng)態(tài)內(nèi)存釋放(,dynamic memory deallocation,),但,指針,pi,本身并沒(méi)有撤銷(xiāo),,該指針?biāo)純?nèi)存空間并未釋放。,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,2024/10/31,8,計(jì)算機(jī)基礎(chǔ)教研室,動(dòng)態(tài)分配數(shù)組與,標(biāo)準(zhǔn)字符串類,:,標(biāo)準(zhǔn)字符串類,string,就是采用動(dòng)態(tài)建立數(shù)組的方式解決數(shù)組溢出的問(wèn)題的,例,7.1,所做的動(dòng)態(tài)內(nèi)存分配與釋放,在,string,類對(duì)象中都是自動(dòng)完成的,在程序中不需要也不允許再顯式地為,string,進(jìn)行動(dòng)態(tài)內(nèi)存的分配與釋放。,【,例,7.1】,動(dòng)態(tài)數(shù)組的建立與撤銷(xiāo),自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,2024/10/31,10,計(jì)算機(jī)基礎(chǔ)教研室,【,例,7.1,】,動(dòng)態(tài)數(shù)組的建立與撤銷(xiāo),#include,#include,using namespace,std,;,int,main(),int,n;,char,*pc;,cout,請(qǐng)輸入動(dòng)態(tài)數(shù)組的元素個(gè)數(shù),n;,/,在運(yùn)行時(shí)確定,可輸入,25,pc=,new char,n;,strcpy(pc,自由存儲(chǔ)區(qū)內(nèi)存的動(dòng)態(tài)分配,);,coutpcendl;,delete,pc;,/,釋放,pc,所指向的,n,個(gè)字符的內(nèi)存空間,return,0;,2024/10/31,11,計(jì)算機(jī)基礎(chǔ)教研室,1.,動(dòng)態(tài)分配失敗,。返回一個(gè)空指針(,NULL,),表示發(fā)生了異常,堆資源不足,分配失敗。,2.,指針刪除與自由存儲(chǔ)區(qū)空間釋放,。刪除一個(gè)指針,p,(,delete,p;,)實(shí)際意思是刪除了,p,所指的目標(biāo)(變量或?qū)ο蟮龋尫帕怂嫉淖杂纱鎯?chǔ)區(qū)空間,而不是刪除本身,釋放自由存儲(chǔ)區(qū)空間后,成了空懸指針??諔抑羔樖浅绦蝈e(cuò)誤的一個(gè)根源)。建議這時(shí)將置空(,NULL,)。,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,指針使用的要點(diǎn):,2024/10/31,13,計(jì)算機(jī)基礎(chǔ)教研室,5,內(nèi)存泄漏(,memory leak,)和重復(fù)釋放,。,new,與,delete,是配對(duì)使用的,,delete,只能釋放,自由存儲(chǔ)區(qū),空間。如果,new,返回的指針值丟失,則所分配的,自由存儲(chǔ)區(qū),空間無(wú)法回收,稱內(nèi)存泄漏,同一空間重復(fù)釋放也是危險(xiǎn)的,因?yàn)?該空間可能已另分配,,所以必須妥善保存,new,返回的指針,以保證不發(fā)生內(nèi)存泄漏,也必須保證不會(huì)重復(fù)釋放,自由存儲(chǔ)區(qū),內(nèi)存空間。,自由存儲(chǔ)區(qū),內(nèi)存的分配與釋放,指針使用的要點(diǎn):,2024/10/31,15,計(jì)算機(jī)基礎(chǔ)教研室,自由存儲(chǔ)區(qū),對(duì)象與構(gòu)造函數(shù),類對(duì)象動(dòng)態(tài)建立與刪除過(guò)程:,通過(guò),new,建立的對(duì)象要調(diào)用構(gòu)造函數(shù),通過(guò),delete,刪除對(duì)象也要調(diào)用析構(gòu)函數(shù)。,CGoods*pc;,pc=new CGoods;,/,分配自由存儲(chǔ)區(qū)空間,并構(gòu)造一個(gè)無(wú)名的,CGoods,對(duì)象;,.,delete pc;,/,先析構(gòu),然后將內(nèi)存空間返回給自由存儲(chǔ)區(qū);,自由存儲(chǔ)區(qū),對(duì)象的生命期并不依賴于建立它的作用域,所以除非程序結(jié)束,,自由存儲(chǔ)區(qū),對(duì)象(無(wú)名對(duì)象)的生命期不會(huì)到期,并且需要顯式地用,delete,語(yǔ)句析構(gòu)該類對(duì)象,上例執(zhí)行,delete,語(yǔ)句時(shí),,C+,自動(dòng)調(diào)用商品類的析構(gòu)函數(shù)。,2024/10/31,16,計(jì)算機(jī)基礎(chǔ)教研室,類說(shuō)明:,class,CGoods,string Name;,int,Amount;,float,Price;,float,Total_value;,public:,CGoods()cout,調(diào)用默認(rèn)構(gòu)造函數(shù),endl;,CGoods(string name,int,amount,float,price),cout,調(diào)用三參數(shù)構(gòu)造函數(shù),endl;,Name=name;Amount=amount;,Price=price;Total_value=price*amount;,CGoods()cout,調(diào)用析構(gòu)函數(shù),endl;,;,【,例,7.3】,演示自由存儲(chǔ)區(qū)對(duì)象分配和釋放。,2024/10/31,18,計(jì)算機(jī)基礎(chǔ)教研室,使用:,int,main(),int,n;,CGoods*pc,*pc1,*pc2;,pc=,new,CGoods(,“,夏利,2000,”,,,10,,,118000);,/,調(diào)用三參數(shù)構(gòu)造函數(shù),pc1=,new,CGoods();,/,調(diào)用默認(rèn)構(gòu)造函數(shù),cout,輸入商品類數(shù)組元素?cái)?shù),n;,pc2=,new,CGoodsn;,/,動(dòng)態(tài)建立數(shù)組,不能初始化,調(diào)用,n,次默認(rèn)構(gòu)造函數(shù),delete,pc;,delete,pc1;,delete,pc2;,return,0;,2024/10/31,19,計(jì)算機(jī)基礎(chǔ)教研室,例,6-16,動(dòng)態(tài)創(chuàng)建對(duì)象舉例,#include,using namespace std;,class Point,public:,Point(),X=Y=0;coutDefault Constructor called.n;,Point(int xx,int yy),X=xx;Y=yy;cout Constructor called.n;,Point()coutDestructor called.n;,int GetX()return X;,int GetY()return Y;,void Move(int x,int y)X=x;Y=y;,private:,int X,Y;,;,2024/10/31,20,計(jì)算機(jī)基礎(chǔ)教研室,int main(),coutStep One:endl;,Point*Ptr1=new Point;,delete Ptr1;,coutStep Two:endl;,Ptr1=new Point(1,2);,delete Ptr1;,return 0;,運(yùn)行結(jié)果:,Step One:,Default Constructor called.,Destructor called.,Step Two:,Constructor called.,Destructor called.,21,例,6-16,動(dòng)態(tài)創(chuàng)建對(duì)象舉例,2024/10/31,21,計(jì)算機(jī)基礎(chǔ)教研室,淺復(fù)制(淺拷貝),實(shí)現(xiàn)對(duì)象間數(shù)據(jù)元素的一一對(duì)應(yīng)復(fù)制。,深復(fù)制(深拷貝),當(dāng)被復(fù)制的對(duì)象數(shù)據(jù)成員是指針類型時(shí),不是復(fù)制該指針成員本身,而是將指針?biāo)傅膶?duì)象進(jìn)行復(fù)制。,淺復(fù)制與深復(fù)制,2024/10/31,22,計(jì)算機(jī)基礎(chǔ)教研室,當(dāng),淺復(fù)制,析構(gòu)時(shí),如用默認(rèn)的析構(gòu)函數(shù),則動(dòng)態(tài)分配的,自由存儲(chǔ)區(qū),對(duì)象不能回收。如果在析構(gòu)函數(shù)中有“,delete p;,”,語(yǔ)句,則如果先析構(gòu)函數(shù),obj1,時(shí),,自由存儲(chǔ)區(qū),對(duì)象已經(jīng)釋放,以后再析構(gòu),obj2,時(shí)出現(xiàn)了二次釋放的問(wèn)題。,自由存儲(chǔ)區(qū),對(duì)象,P,P,自由存儲(chǔ)區(qū),對(duì)象,圖,7.2,深復(fù)制,深復(fù)制:,重新定義復(fù)制的構(gòu)造函數(shù),給每個(gè)對(duì)象獨(dú)立分配一個(gè),自由存儲(chǔ)區(qū),對(duì)象,稱,深復(fù)制,。,這時(shí)先復(fù)制對(duì)象主體,再為,obj2,分配一個(gè),自由存儲(chǔ)區(qū),對(duì)象,最后用,obj1,的,自由存儲(chǔ)區(qū),對(duì)象復(fù)制,obj2,的,自由存儲(chǔ)區(qū),對(duì)象。,obj1,obj2,淺復(fù)制與深復(fù)制,2024/10/31,24,計(jì)算機(jī)基礎(chǔ)教研室,淺復(fù)制與深復(fù)制,【,例,7.4】,定義復(fù)制構(gòu)造函數(shù),(,copy structor,)和復(fù)制賦值操作符(,copy Assignment Operator,)實(shí)現(xiàn)深復(fù)制。,學(xué)生類定義:,class,student,char,*pName;,/,為了演示深復(fù)制,不用,string,類,public,:,student();,/,默認(rèn)構(gòu)造函數(shù),student(char*pname);,/,帶參數(shù),構(gòu)造函數(shù),student(student,/,復(fù)制構(gòu)造函數(shù),student();,/,析構(gòu)函數(shù),student&,operator,=(student,/,復(fù)制賦值操作符,檢驗(yàn),主函數(shù),和,運(yùn)行結(jié)果,2024/10/31,25,計(jì)算機(jī)基礎(chǔ)教研室,例,7.4,實(shí)現(xiàn)深復(fù)制,默認(rèn)構(gòu)造函數(shù):,student:student(),coutConstructor;,pName=NULL;,cout,默認(rèn)“,endl;,帶參數(shù),構(gòu)造函數(shù):,student:student(,char,*pname),coutConstructor;,if,(pName=,new,char,strlen(pname)+1),strcpy(pName,pname);,coutpNameendl;,2024/10/31,26,計(jì)算機(jī)基礎(chǔ)教研室,例,7.4,實(shí)現(xiàn)深復(fù)制,復(fù)制賦值操作符:,student&student:,operator,=(student&s),coutCopy Assign operator;,delete,pName,;/,如原來(lái)已分配,應(yīng)先撤銷(xiāo),再重分配,if,(s.pName),/,否則會(huì)發(fā)生內(nèi)存泄漏,if,(pName=,new,char,strlen(s.pName)+1),strcpy(pName,s.pName);,else,pName=NULL;,coutpNameendl;,return,*,this,;,2024/10/31,28,計(jì)算機(jī)基礎(chǔ)教研室,例,7.4,實(shí)現(xiàn)深復(fù)制,int,main(,void,),student s1(,范英明,),s2(,沈俊,),s3;,studen

注意事項(xiàng)

本文(第七章-動(dòng)態(tài)內(nèi)存分配--C++程序設(shè)計(jì)-計(jì)算機(jī)等級(jí)考試教學(xué)課件)為本站會(huì)員(沈***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  sobing.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!