版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、:數(shù)據(jù)類型與語(yǔ)法作者:謝興 HYPERLINK mailto:enigma19971 enigma19971 轉(zhuǎn)載需注明出處Symbiann系統(tǒng)已經(jīng)提提供了一套已已經(jīng)定義好的的內(nèi)置的數(shù)據(jù)據(jù)類型。為了了保證你的代代碼是編譯器器無(wú)關(guān)的,應(yīng)應(yīng)當(dāng)使用下面面symbiian系統(tǒng)提提供的數(shù)據(jù)類類型,而不要要使用原生數(shù)數(shù)據(jù)類型(nnativee typees,這里指指標(biāo)準(zhǔn)C中的的int ,char等等)?;绢愋蚑IntX 和和 TUinntX (其其中X = 8, 166 和 322) 分別用用來(lái)表示 88位, 166位 和 332位的有符符號(hào)和無(wú)符號(hào)號(hào)的整數(shù)。 一般情況下下,使用TIInt 和TTUin
2、t就就可以了,除除非是在考慮慮代碼優(yōu)化或或兼容性的時(shí)時(shí)候,才會(huì)用用到TIntt8,TInnt16這樣樣的類型。TTInt 或或 TUinnt 類型分分別對(duì)應(yīng)有符符號(hào)和無(wú)符號(hào)號(hào)的整數(shù)。TInt64. 在版本88.0之前,SSymbiaan系統(tǒng)中不不支持64位位的算術(shù)運(yùn)算算,而是用兩兩個(gè)32位的的值來(lái)實(shí)現(xiàn)664位的整數(shù)數(shù),在8.00版本之后,TTInt644和TUInnt64才被被定義為loong loong類型,真真正使用644位的內(nèi)置數(shù)數(shù)據(jù)類型。TReal322 和 TRReal644 (TReeal相當(dāng)于于TReall64) 這兩個(gè)個(gè)數(shù)據(jù)類型相相當(dāng)于單精度度和雙精度的的浮點(diǎn)數(shù),由由于浮點(diǎn)數(shù)的
3、的運(yùn)算要比整整數(shù)慢,所以以一般應(yīng)盡量量避免使用浮浮點(diǎn)數(shù)的運(yùn)算算。TTextX (其中X = 8 或或 16) 分別對(duì)對(duì)應(yīng)窄或?qū)挼牡淖址ㄗⅲ核^窄字符符通常ASCCII碼字符符,而寬字符符是指uniicode字字符集的字符符 )TAny*TAny* 意意為指向任意意內(nèi)容的指針針,在這種意意義上講,TTAny相當(dāng)當(dāng)于voidd, TAnny* 相當(dāng)當(dāng)于TAnyy*。但是,在在某些場(chǎng)合下下,voidd標(biāo)示空,如:void hhello(void);這時(shí),不要將它它改寫(xiě)為: TAnyy helllo(TAnny);TBool 標(biāo)示布爾類型。SSymbiaan系統(tǒng)提供供了兩個(gè)常量量:ETruue (=
4、11) 和 EEFalsee (=0),分別表示示真和假。注意:在Symmbian系系統(tǒng)中,TBBool被定義義為int, 而ETruue和EFalsse被定義為為enum,所所以,如果一一個(gè)函數(shù)的返返回值為T(mén)BBool,不不要用如下的的代碼來(lái)比較較函數(shù)的返回回值:TBool iisLargger(TIInt a, TIntt b)return (ab)?ETruue:EFaalse; if(isLaarger(4,3)=ETruue). /錯(cuò)誤誤,編譯不過(guò)過(guò)。if(isLaarger(4,3). /正確2類和對(duì)象2.1 Symmbian系系統(tǒng)中的命名名習(xí)慣:在Symbiaan系統(tǒng)中編編寫(xiě)代碼
5、時(shí),應(yīng)應(yīng)當(dāng)遵守種樣樣幾個(gè)規(guī)則:成員變量的的命名以小寫(xiě)寫(xiě)字母i開(kāi)頭頭,方法的參參數(shù)以小寫(xiě)字字母a開(kāi)頭,例例如:class PPernonnpublic:TInt iiAge;void SSetAgee(TIntt aAgge)iAAge = aAge;在symbiaan系統(tǒng)中存存在幾種不同同類型的類(cclass),不不同類型的類類,其特性也也各不相同。有的在堆(heeap)上創(chuàng)創(chuàng)建,有的在在棧(staack)上創(chuàng)創(chuàng)建,特別的的是,類的實(shí)實(shí)例(insstancee)的清除方方式也不盡相相同(下面,為為了方便我們們把類的類別別稱為型別)。型型別(claass tyype)可以以體現(xiàn)這些不不同的特點(diǎn)
6、。每每個(gè)型別都有有一套定義好好的關(guān)于如何何創(chuàng)建和清除除實(shí)例的規(guī)則則。為了容易易區(qū)分型別,SSymbiaan系統(tǒng)使用用了一個(gè)簡(jiǎn)單單的命名規(guī)則則:類名以大大寫(xiě)字母開(kāi)頭頭(T,C,RR 或M)。作作為類的設(shè)計(jì)計(jì)者,你先要要考慮這個(gè)類類的行為,看看它到底與哪哪種型別匹配配,一旦確定定了它的類型型,然后你就就可以專注于于該類的功能能。同樣,對(duì)對(duì)一個(gè)類的使使用者來(lái)講,如如果他不熟悉悉這個(gè)類, 但類的命名名規(guī)則可以幫幫助他弄清你你的意圖-如如何用安全的的方式初始化化、使用和銷銷毀一個(gè)類的的對(duì)象(obbject)。下面,我主要討討論不同型別別的主要特性性。T 類T類的行為類似似于C+中中的內(nèi)置類型型,因此,它
7、它們以T作前前綴(”T”代表”Type”)。象內(nèi)置置類型一樣,它它們沒(méi)有析構(gòu)構(gòu)方法(deestrucctor),這這導(dǎo)致的結(jié)果果是:T類不不能包含具有有析構(gòu)方法的的成員變量。所所以,一般情情況下,T類類的成員變量量只能是內(nèi)置置類型的數(shù)據(jù)據(jù)或者是其它它的T類的對(duì)對(duì)象。在某些些的情況下TT類也可以包包含其它對(duì)象象的指針或引引用,不過(guò),這這時(shí)它們之前前是“使用”關(guān)系,而不不是“擁有”關(guān)系(也就就是說(shuō),這個(gè)個(gè)T類對(duì)象并并不負(fù)責(zé)對(duì)成成員的創(chuàng)建和和銷毀的工作作)。不能擁?yè)碛型獠繑?shù)據(jù)據(jù)的原因是因因?yàn)門(mén)類沒(méi)有有析構(gòu)方法。正正是由于沒(méi)有有析構(gòu)方法,TT類的對(duì)象可可以在棧上創(chuàng)創(chuàng)建,當(dāng)程序序流程退出函函數(shù)或產(chǎn)生ll
8、eave(一一種代碼異常常)的時(shí)候,系系統(tǒng)自動(dòng)清除除它。即使TT類有一個(gè)析析構(gòu)方法,在在發(fā)生異常(在在Symbiian系統(tǒng)中中,異常被稱稱為leavve)時(shí)Syymbiann 系統(tǒng)也不不會(huì)調(diào)用它,因因?yàn)閘eavve沒(méi)有模仿仿標(biāo)準(zhǔn)C+的拋出異常常的做法。T類的對(duì)象也可可以在堆上創(chuàng)創(chuàng)建。但是,應(yīng)應(yīng)當(dāng)在調(diào)用有有可能發(fā)生異異常的代碼之之前,將這個(gè)個(gè)對(duì)象放入到到清除棧(clleanuppStackk),在發(fā)生生異常的時(shí)候候,清除棧(clleanuppStackk)會(huì)釋放這這個(gè)對(duì)象。C 類這種類都是從CCBase派派生來(lái)的(直直接或間接)。/.h fiileclass CCStudeent:publiic
9、 CBasee publicc:CStudeent()RDebuug:Prrint(_L(i am a studeent);CStuddent()RDebuug:Prrint(_L(pllease, dont killl me!);void SSampleeFuncttion();privatte:TInt iiCode;TInt iiScoree;CBase有兩兩個(gè)特點(diǎn):首首先,它有一一個(gè)虛的析構(gòu)構(gòu)方法,這樣樣,可以通過(guò)過(guò)CBasee指針來(lái)刪除除它的子類。代代碼如下所示示:CBase *pStu = neww CStuudent();delete pStu;結(jié)果: ii am aa stud
10、dent pleasee, donnt kiill mee! 其次,CBasse類和它的的子類,重載載了new操操作符,這使使得當(dāng)它在堆堆上創(chuàng)建的時(shí)時(shí)候,自動(dòng)初初始化為0,也也就是說(shuō),當(dāng)當(dāng)它一開(kāi)始被被創(chuàng)建出來(lái)的的時(shí)候,所有有的成員變量量都被初始化化為0,所以以您不必在構(gòu)構(gòu)造方法中去去做這件事情情。但是,在在棧上創(chuàng)建對(duì)對(duì)象時(shí),情況況并非這樣, 因?yàn)檫@時(shí)沒(méi)沒(méi)有用到neew操作。這這將潛在地導(dǎo)導(dǎo)致堆上創(chuàng)建建的對(duì)象和棧棧上創(chuàng)建的對(duì)對(duì)象的行為不不一致。因此此,C類的對(duì)對(duì)象一定要在在堆上創(chuàng)建。很明顯,當(dāng)一個(gè)個(gè)堆上的C類類對(duì)象不再被被需要時(shí),我我們需要消耗耗它。 一個(gè)個(gè)C類的對(duì)象象可能以兩種種方式存在:其它
11、類的指指針成員變量量或是一個(gè)局局部的針指變變量。在前一一種情況下,我我們可以在類類的析構(gòu)方法法中調(diào)用deelete來(lái)來(lái)刪除它;后后一種情況要要復(fù)雜一些,在在調(diào)用任何有有潛在的異常常(leavve)的代碼碼之前,要把把這個(gè)指針?lè)欧诺角宄龡#╟cleanuup staack)中,否否則有可能發(fā)發(fā)生內(nèi)存泄露露。CBasse 類聲明明了私有的拷拷貝構(gòu)造方法法和賦值操作作(=)。這這是一個(gè)很好好的策略,它它可以用來(lái)防防止客戶代碼碼不小心地使使用了淺拷貝貝或賦值的方方法。由于基基類的拷貝構(gòu)構(gòu)造和賦值是是私有的,所所以,如果您您希望您的類類可以能夠使使用拷貝構(gòu)造造方法,您必必須顯式地聲聲明和定義拷拷貝構(gòu)造方
12、法法和賦值操作作。但是,考考慮到C類的的特性,深拷拷貝可能造成成發(fā)生異常(lleave)的的隱患,而您您絕對(duì)不能讓讓類的構(gòu)造方方法(或析構(gòu)構(gòu)方法)發(fā)生生異常(我們們?cè)诒窘坛痰牡暮竺娼忉屧颍?。所以以,如果您確確實(shí)需要一個(gè)個(gè)拷貝的方法法,那么您可可以為類添加加一個(gè)的可能能會(huì)發(fā)生異常常的方法來(lái)完完成同樣的任任務(wù),例如:CloneeL()或CCopyL()。如果您您提供的這個(gè)個(gè)類是從CBBase派生生的,您就不不必為了防止止客戶代碼使使用有潛在安安全問(wèn)題的“淺”拷貝,而在在代碼中將這這些方法聲明明為私有的。R 類前綴“R” 在在這里代表資資源(Ressourcee), 通常常是外部資源源,例如:文
13、文件的句柄(hhandlee)。 和C類不同,SSymbiaan系統(tǒng)中不不存在一個(gè)對(duì)對(duì)應(yīng)的RBaase類,所所以一個(gè)R類類應(yīng)當(dāng)有一個(gè)個(gè)構(gòu)造方法來(lái)來(lái)將它的資源源句柄置為00,表明還沒(méi)沒(méi)有資源和這這個(gè)新建的對(duì)對(duì)象關(guān)聯(lián)在一一起。但是,不不要在構(gòu)造方方法中初始化化資源句柄,因因?yàn)檫@樣有可可能使構(gòu)造方方法產(chǎn)生異常常。R類中常常常有類如OOpen(), Creeate() 或 Innitiallize()這樣的方法法,它們用來(lái)來(lái)分配資源,設(shè)設(shè)置句柄成員員變量的值,并并返回錯(cuò)誤代代碼或是產(chǎn)生生異常。 RR類通常也有有對(duì)應(yīng)的Cllose()或或Resett()類,用用來(lái)釋放資源源,重置句柄柄的值-表明明沒(méi)有資
14、源和和該對(duì)象關(guān)聯(lián)聯(lián)。使用R類類時(shí),一個(gè)常常見(jiàn)的錯(cuò)誤是是忘記調(diào)用它它的Closse()方法法(當(dāng)然,該該方法也可以以是其它名字字,但它經(jīng)常常被命名為CClose()或或是有一個(gè)析析構(gòu)方法釋放放資源,這會(huì)會(huì)引起資源的的泄露。R類通常都很小小,除了資源源句柄沒(méi)有其其它的成員變變量。因?yàn)椴徊恍枰?。它通通常也沒(méi)有析析構(gòu)方法,資資源的釋放都都是在Cloose()方方法中進(jìn)行的的。大多數(shù)情情況下,R類類都是作為類類的成員變量量或局部變量量存在的。只只有少數(shù)情況況下,在堆上上創(chuàng)建。您必須確保,當(dāng)當(dāng)程序發(fā)后異異常的時(shí)候,資資源能被正確確地釋放-通通常是使用資資源棧。如果果一個(gè)R類是是一個(gè)堆上的的自動(dòng)變量(相相對(duì)
15、于成員變變量),您一一但要保證資資源被釋放,而而且,變量本本身也要被釋釋放。typicallly byy usinng twoo pushh callls: ClleanuppCloseePushLL(), oor asiimilarr funcction,to ennsure that the rresourrce iss cleaaned uup, annd a sstandaard ClleanuppStackk:PusshL(TAAny*) whichh simpply caalls UUser:Free() on the hheap ccell.R類的成員變量量通常都很簡(jiǎn)簡(jiǎn)單,所以一
16、一般不需要深深拷貝(biitwisee copyy)。R類的的拷貝可能會(huì)會(huì)引起混亂(想想象一下:如如果兩個(gè)對(duì)象象同時(shí)在一個(gè)個(gè)資源句柄上上調(diào)用Cloose()方方法,或兩個(gè)個(gè)對(duì)象都沒(méi)有有釋放資源,會(huì)會(huì)發(fā)生什么情情況?)如果果,您想阻止止任何對(duì)R類類的拷貝,您您應(yīng)當(dāng)聲明(但但不定義)一一個(gè)私有的構(gòu)構(gòu)造方法和賦賦值操作。M 類當(dāng)提到多繼承的的時(shí)候,它意意味著從一個(gè)個(gè)主要的類派派生,同時(shí)也也混雜基它類類的功能。前前綴M是單詞詞Mixinn的首字母。SSymbiaan系統(tǒng)不贊贊成多繼承的的做法,因?yàn)闉檫@個(gè)引入額額外的復(fù)雜性性,M類是一一個(gè)抽象類,它它的作用相當(dāng)當(dāng)于javaa中的接口(iinterffac
17、e)。在在Symbiian系統(tǒng)中中,M 類常常被用來(lái)定義義回調(diào)接口或或者是觀察者者(obseerver)類類。M類也可可以被其它類類繼承。下面面我們給出兩兩個(gè)例子。class MMAnimaalpublicc:virtuaal void EatL() =0;class MMDomessticAnnimal : pubblic MAnimmalpublicc:virtuaal void NameLL() =00;class CCCat : publlic CBasee, publlic MDomeesticAAnimallpublicc:virtuaal void EatL(); / 從MAni
18、mmal, 經(jīng)經(jīng)過(guò)MDommesticcAnimaal繼承virtuaal void NameLL(); / 從 MDommesticcAnimaal繼承/ Othher fuunctioons ommittedd for clariity;上面的例子演示示了一個(gè)從CCBase類類和一個(gè)M類類派生的具體體類。而類MMDomessticAnnimal又又是從MAnnimal派派生的。象接接口一樣,由由于不能被實(shí)實(shí)例化,M類類只能有虛(vvirtuaal)函數(shù),不不能有成員變變量和構(gòu)造方方法。但它可可以有析構(gòu)方方法, 條件件是,實(shí)現(xiàn)它它的具體類必必須是從CBBase派生生的。在定義義完類以后,然然
19、后可以用使使用它。代碼碼如下:CCat *catt1 = new CCCat;delete cat11; /正確然下面的代碼卻卻是錯(cuò)誤的。MAnimall *catt2 = neww CCatt;delete cat11; /錯(cuò)誤當(dāng)用M類的指針針引用一個(gè)對(duì)對(duì)象的時(shí)候,如如果用dellete刪除除這個(gè)指針,則則這個(gè)M類必必須提供一個(gè)個(gè)虛擬的析構(gòu)構(gòu)方法,否則則會(huì)出現(xiàn)系統(tǒng)統(tǒng)異常(paanic ccode 442)。將MMAnimaal的代碼改改寫(xiě),則上面面代碼沒(méi)有問(wèn)問(wèn)題。class MMAnimaalpublicc:virtuaal void EatL() =0;virtuaal MAniimal(
20、); /增加一個(gè)個(gè)虛的析構(gòu)方方法。;3描述符(deescripptor)在Symbiaan 系統(tǒng)中中,字符串被被稱為“描述符”(desccriptoor),因?yàn)闉樗鼈兪亲晕椅颐枋龅?。在在描述符中保保存了它所表表示的字符串串的長(zhǎng)度和它它的底層的內(nèi)內(nèi)存布局的信信息。描述符符比標(biāo)準(zhǔn)C中中的字符數(shù)組組和字符指針針要復(fù)雜,您您可能需要多多花些時(shí)間來(lái)來(lái)學(xué)習(xí)和掌握握它的用法。關(guān)關(guān)鍵是,它們們的特殊設(shè)計(jì)計(jì)使得它們?cè)谠谏倭績(jī)?nèi)存的的設(shè)備上非常常有效率,僅僅用非常少的的內(nèi)存就可以以保存自己的的長(zhǎng)度和內(nèi)存存布局的信息息?,F(xiàn)在,讓讓我們來(lái)深入入了解描述符符的設(shè)計(jì)思想想。在Symbiaan系統(tǒng)中,描描述符是相當(dāng)當(dāng)讓人迷惑
21、的的,因?yàn)樗牡姆N類繁多。不不同種類的描描述符具有不不同的特性和和用法,但又又經(jīng)常能相互互轉(zhuǎn)換。它們們不同于標(biāo)準(zhǔn)準(zhǔn)C+中的的strinng,javva語(yǔ)言中的的strinng類或MFFC中的CSStringg,因?yàn)槌绦蛐騿T必須自己己管理底層的的內(nèi)存分配和和清除工作。它它們具有防治治內(nèi)存溢出的的機(jī)制,并且且不依賴NUULL終結(jié)符符號(hào)來(lái)決定字字符串的長(zhǎng)度度,從這方而而來(lái)講,它也也不同于C語(yǔ)語(yǔ)言中的字符符串?,F(xiàn)在我們來(lái)討論論:什么是描描述符?它們們是如何工作作的?在探討討這些不同的的描述符之前前,先讓我們們需要弄清楚楚一個(gè)基本的的概念:什么么是字符串?dāng)?shù)數(shù)據(jù)的“寬度”?這個(gè)長(zhǎng)度度指的是單個(gè)個(gè)字符是8b
22、bit的,還還是16biit的寬度。在在早期的版本本中,字符的的寬度都是88bit的,后后來(lái)為了支持持Unicoode字符集集,從第5版版起,Symmbian系系統(tǒng)將16bbit 的字字符作為標(biāo) 準(zhǔn)。Symmbian系系統(tǒng)現(xiàn)在支持持這兩種字符符長(zhǎng)度的描述述符,除了CCopy()和Size()兩個(gè)方法法以外,這兩兩種寬度的描描述符的行為為是完全一致致的,這兩個(gè)個(gè)方法的使用用,我們后面面再介紹。另另外,有一套套中立的描述述符類型,它它們既可以被被定義為窄的的描述符類型型,也可以被被定義為寬的的描述符類型型,這要取決決于編譯時(shí)的的寬度。您可可以從它的名名字上很容易易看出這個(gè)類類型所表示的的寬度。假如
23、如,它以8結(jié)結(jié)尾(例如:TPtr88,就意味著著它表示是的的8bit的的窄字符,而而以16結(jié)尾尾的描述符類類(例如:TTPtr166)則操作116bit的的寬字符。 對(duì)中立(nneutraal)的類型型來(lái)講,沒(méi)有有數(shù)字結(jié)尾(例例如:TPttr),在Symbbian系統(tǒng)統(tǒng)第5版以后后,默認(rèn)的情情況下,它們們表示寬度為為16bitt的字符串。它它們之間的關(guān)關(guān)系比較類似似于TIntt,TIntt16或TIInt32 之間的關(guān)系系,這一點(diǎn)應(yīng)應(yīng)當(dāng)是比較易易于理解的。一般情況下,您您沒(méi)有必要指指明是字符串串的寬度,用用中立的類型型就可以了,這這樣使你的代代碼易于在寬寬字符版本和和窄字符版本本之間轉(zhuǎn)換(有有
24、過(guò)編程經(jīng)驗(yàn)驗(yàn)的朋友應(yīng)該該有這樣的印印象,我們平平常寫(xiě)代碼,大大多情況下,僅僅僅使用UIINT類型,而而較少考慮使使用UINTT16,UIINT32類類型)。另外一個(gè)問(wèn)題是是:描述符和和字面量(lliteraal)的區(qū)別別。所謂字面面量是指在編編碼的時(shí)候就就已經(jīng)確定的的量,例如,標(biāo)標(biāo)準(zhǔn)C中的 char* pp = HHello worldd;其中的Helllo woorld就就是字面量。在在Symbiian系統(tǒng)中中,對(duì)它們的的處理是很不不一樣的,這這點(diǎn)我們?cè)诤蠛竺嬖俳榻B。有了這樣的一些些認(rèn)識(shí), 現(xiàn)現(xiàn)在我們可以以來(lái)看看有哪哪些描述符類類型。在Syymbiann系統(tǒng)中描述述符類型有兩兩大種類:不不可
25、修改(nnon-moodifiaable)的的描述符和可可修改(moodifiaable)的的描述符。3.1不可修改改(non-modiffiablee)的描述符符 在Symbiaan系統(tǒng)中,所所有的描述符符都繼承自TTDesC,在在前面我們已已經(jīng)討論了類類名前綴T所所代表的意義義,在這里,我我們更關(guān)心類類名的后綴CC所代表的意意義,這個(gè)CC是單詞Coonstannt的首字符符,表示這個(gè)個(gè)類是不可更更改的。這個(gè)個(gè)類提供了一一些用來(lái)返回回字符串的長(zhǎng)長(zhǎng)度和操作數(shù)數(shù)據(jù)的方法。LLengthh()方法返返回了描述符符的長(zhǎng)度,因因?yàn)?,每個(gè)描描述符對(duì)象在在內(nèi)存中的布布局都是同樣樣的,用4個(gè)個(gè)字節(jié)來(lái)表示示它
26、所包含的的數(shù)據(jù)的長(zhǎng)度度(實(shí)際上,只只用了32個(gè)個(gè)bit中的的28個(gè)biit,剩余的的4bit留留作它用,所所以描述符能能表示的最大大的長(zhǎng)度為2228 字節(jié)節(jié),256 MB,不過(guò)過(guò)這已經(jīng)足夠夠了)。所以以,Lenggth()方方法沒(méi)有被它它的子類重寫(xiě)寫(xiě),它對(duì)所有有子類都有效效。但是,根根據(jù)實(shí)現(xiàn)子類類的方法的不不同,子類訪訪問(wèn)數(shù)據(jù)的方方式也不一樣樣,Symbbian系統(tǒng)統(tǒng)不要求它的的子類通過(guò)虛虛函數(shù)的方式式來(lái)實(shí)現(xiàn)自己己的訪問(wèn)數(shù)據(jù)據(jù)的方法。 不用虛函數(shù)數(shù)重寫(xiě)的原因因是因?yàn)?,虛虛函?shù)會(huì)給每每個(gè)被派生的的描述符對(duì)象象增加4節(jié)字字的額外負(fù)擔(dān)擔(dān),c+用用這4個(gè)字節(jié)節(jié)來(lái)存放指向向虛函數(shù)表的的指針。我們們前面說(shuō)
27、過(guò),在在設(shè)計(jì)描述符符的時(shí)候要讓讓它盡可能高高效,額外的的字節(jié)開(kāi)銷被被認(rèn)為是不理理想的。存放放長(zhǎng)度的4個(gè)個(gè)字節(jié)中,228bit用用來(lái)表示長(zhǎng)度度,剩下的44bit用來(lái)來(lái)表示描述符符的類型。目目前,symmbian系系統(tǒng)中有5種種派生的描述述符類型,44bit限制制了描述符的的種類最多只只能有16種種,但這已經(jīng)經(jīng)足夠了。子子類可以通過(guò)過(guò)調(diào)用基類TTDesC的的Ptr()方方法來(lái)訪問(wèn)描描述符的數(shù)據(jù)據(jù),Ptr()方法檢查查這4個(gè)biit,確定描描述符的類型型并返回它的的數(shù)據(jù)在內(nèi)存存中的地址。當(dāng)當(dāng)然,這要求求TDesCC基類清楚它它的子類的內(nèi)內(nèi)存布局,并并在Ptr()方方法中使用硬硬編碼的方法法。后面,為
28、為了表述上的的方便,我們們也把這種不不可修改的描描述符也稱為為常量描述符符(consstant descrriptorr)總結(jié):不可修改改的描述符類類TDesCC是所有的非非字面量描述述符的基類,它它提供了確定定描述符長(zhǎng)度度和訪問(wèn)數(shù)據(jù)據(jù)的方法,另另外,它實(shí)現(xiàn)現(xiàn)了所有的您您想用來(lái)處理理常量字符串串的操作。3.2可修改(mmodifiiable)的的描述符所有的可修改的的描述符都從從TDes基基類派生,而而TDes本本身又是從TTDesC派派生的。TDDes有一個(gè)個(gè)額外的成員員變量用來(lái)存存放為該描述述符分配數(shù)據(jù)據(jù)的最大長(zhǎng)度度。MaxLLengthh()方法返返回了這個(gè)最最大的長(zhǎng)度。像像TDesCC
29、中的Lenngth()方方法一樣,MMaxLenngth()方法也不被被TDes的的子類繼承。TDes類提供了一系列的方法, 用來(lái)對(duì)可修改字符串?dāng)?shù)據(jù)的操作,包括對(duì)字符串的附加、填充和格式化操作。所有的這些方法都被派生類繼承,派生類只實(shí)現(xiàn)一些特定的構(gòu)造方法和復(fù)制賦值的方法。這些方法都不負(fù)責(zé)分配內(nèi)存,假如它們超過(guò)了描述符的數(shù)據(jù)長(zhǎng)度,例如,用Append()方法在某個(gè)字符串后面附加另一個(gè)字符串時(shí),在調(diào)用該方法之前,您必須確保有足夠的內(nèi)存空間。當(dāng)然,只要不超過(guò)描述符的最大存儲(chǔ)容量,描述符的長(zhǎng)度可以自由地伸縮。當(dāng)描述符長(zhǎng)度比最大長(zhǎng)度短的時(shí)候,描述符的后面部分是多余未用的。這些方法使用了斷言(assert
30、ion)來(lái)確保描述符的最大長(zhǎng)度不會(huì)被超出。如果發(fā)生內(nèi)存溢出,將會(huì)產(chǎn)生一個(gè)panic(關(guān)于panic,我們將在后面的章節(jié)介紹),這樣可以方便您檢查和修正程序的錯(cuò)誤。事實(shí)上,不可能能使描述符溢溢出,這一點(diǎn)點(diǎn)保證了您代代碼的強(qiáng)壯性性,而且不易易產(chǎn)生難以跟跟蹤的內(nèi)存陷陷阱。但需要注意的是是,由于基類類的構(gòu)造方法法是protteced類類型的,所以以您無(wú)法直接接實(shí)例化一個(gè)個(gè)TDesCC或TDess類的實(shí)例?,F(xiàn)現(xiàn)在我們來(lái)看看看描述符的的派生類,您您可以實(shí)例化化和使用派生生類的對(duì)象。正正如前面所說(shuō)說(shuō),這個(gè)地方方是比較讓人人迷惑的,因因?yàn)槊枋龇娲嬖诖罅康呐膳缮悺?前前面,我們已已經(jīng)解釋過(guò)為為什么每個(gè)類類會(huì)
31、有三個(gè)不不同的版本,例例如:TDees8, TTDes166 和 TDDes,分別別對(duì)應(yīng)窄字符符,寬字符和和中立的類。現(xiàn)現(xiàn)在,讓我們們看看有哪些些主要的描述述符類型,在在深入討論每每種類型的細(xì)細(xì)節(jié)之前,我我們先考察一一下它們?cè)谝灰话闱闆r下的的內(nèi)存布局。描描述符有兩種種基本的內(nèi)存存布局:指針針描述符和緩緩存區(qū)描述符符。不同之處處在于,指針針描述符持有有一個(gè)指向字字符串的指針針,而這個(gè)字字符串存儲(chǔ)在在內(nèi)存中的基基它位置。與與指針描述符符不同,緩存存區(qū)描述符本本身持有字符符數(shù)據(jù),也就就是說(shuō)字符數(shù)數(shù)據(jù)本身構(gòu)成成了描述符的的一部分??偨Y(jié):TDess 是所有的的可修改的描描述符的基類類, 并且它它自己也是
32、從從TDesCC派生的。它它有一個(gè)能返返回最大的內(nèi)內(nèi)存容量的方方法和一系列列的用來(lái)修改改字符串?dāng)?shù)據(jù)據(jù)的方法。3.3 指針描描述符(poointerr desccriptoor)指針描述符可分分為兩種:TTPtrC 和TPtr(我我們前面說(shuō)過(guò)過(guò),每種類型型的描述符,按按照字符寬度度,都可以分分為三個(gè)版本本,例如:窄窄字符版本TTPtrC88,寬字窄版版本TPtrrC16和中中立的版本TTPtrC,所所以嚴(yán)格來(lái)講講,有六種指指針描述符)。指針描述符所持有的字符串是跟描述符本身分開(kāi)來(lái)存放的,它可以被存儲(chǔ)在ROM中,堆中或棧中。由于保存數(shù)據(jù)的內(nèi)存既不為描述符所擁有,也不通過(guò)它來(lái)管理。所以,如果要該描述
33、符是在堆上分配的,那么應(yīng)通過(guò)堆描述符(HBufC,下面將要講解)來(lái)操作內(nèi)存的分配和銷毀;如果指針描述符所指向的字符串是在棧上分配的,那這個(gè)內(nèi)存必須是已經(jīng)在棧上分配好的。通常情況下,指針描述符是基于棧的,但有時(shí)候,它們也可以在堆上使用,例如:作為一個(gè)CBase派生類的成員變量的時(shí)候。在不可修改的描述符(TPtrC)中,指向數(shù)據(jù)的指針存放在長(zhǎng)度的后面,因此,指針描述符的總長(zhǎng)度為2個(gè)字(word);在可修改的指針描述符中,它存放在最大長(zhǎng)度的后面,因此,總長(zhǎng)度為3個(gè)字。下圖比較了TPtr和TPtrC內(nèi)存布局.iLengthiLength(12)iMaxLengthiPtrHello world!iLe
34、ngth(12)iPtrTPtrCTPtr TPtrCTPtrC相當(dāng)當(dāng)于C語(yǔ)言中中的consst chaar*。被它它指向的數(shù)據(jù)據(jù)可以被訪問(wèn)問(wèn)但不能被修修改:也就是是說(shuō),描述符符中的數(shù)據(jù)是是常量。所有有的從基類TTDesC中中繼承的操作作都是可訪問(wèn)問(wèn)的。TPttrC定義了了一系列的構(gòu)構(gòu)造方法,使使得它能從其其它的描述符符、指向內(nèi)存存的指針或以以0結(jié)尾的CC語(yǔ)言字符串串構(gòu)造。/ 字面量描描述符將在后后面介紹_LIT(KLLiteraalDes, Sixxty ziipperss weree quicckly ppickedd fromm the wovennjute baag);TPtrC pp
35、angraamPtr(KLiteeralDees); / 從字面面量描述符構(gòu)構(gòu)造TPtrC ccopyPttr(panngramPPtr); / 從其其它的描述符符構(gòu)造TBufC cconstBBufferr(KLitteralDDes); / 常量量緩存區(qū)描述述符,后面介介紹TPtrC pptr(coonstBuuffer); / Consttructeed froom a TTBufC/ TTexxt8 iss a siingle (8-biit) chharactter, eequivaalent to unnsigneed chaarconst TTText88* cSttring =
36、 (TTText8*)Walltz, bbad nyymph, for qquick jigsvex;/ 從以0結(jié)結(jié)尾的字符串串構(gòu)造TPtrC8 anothherPtrr(cStrring);TUint8* memooryLoccationn; / Pointter innto meemory initiializeed elssewherreTInt leength; / LLengthh of mmemoryy to bbe reppresennted.TPtrC8 memPttr(memmoryLoocatioon,lenngth); / 從從一個(gè)指針構(gòu)構(gòu)造。這個(gè)指針本身可可以改變成指指
37、向其他的字字符串?dāng)?shù)據(jù)(通過(guò)Sett()方法)。如果您想想指明,不能能改變您的TTPtrC所所指向的數(shù)據(jù)據(jù),那么您可可以將TPttrC聲明為為constt,這樣,當(dāng)當(dāng)您試圖用SSet()方方法更改TPPtrC所指指向的數(shù)據(jù)時(shí)時(shí),編譯器會(huì)會(huì)產(chǎn)生警告。/ 字面量描描述符_LIT(KLLiteraalDes11, Siixty zzipperrs werre quiickly pickeed froom thee woveen juttebag);_LIT(KLLiteraalDes22, Waaltz, bad nnymph, for quickk jigss vex);TPtrC aalpha(K
38、LiteeralDees1);TPtrC bbeta(KKLiterralDess2);alpha.SSet(KLLiteraalDes22); / alphha poiints tto thee dataa in KKLiterralDess2beta.Seet(KLiiterallDes1); / beta pointts to the ddata iin KLiiterallDes1const TTPtrC gammaa(betaa); / Poinnts too the data in beeta, KKLiterralDess1gamma.SSet(allpha); / GGener
39、aates aa warnning, but ppointss to aalpha這里應(yīng)當(dāng)加一些些示范代碼TPtrTPtr 是可可修改的指針針描述符,它它可用來(lái)訪問(wèn)問(wèn)和修改字符符串或二進(jìn)制制數(shù)據(jù)。TDDesC 和和TDes所所提供的所有有的操作都適適用于TPttr。這個(gè)類類定義了一些些構(gòu)造方法,使使得它能從指指向內(nèi)存的指指針構(gòu)造,并并設(shè)置適當(dāng)?shù)牡拈L(zhǎng)度值和最最大長(zhǎng)度值。編譯器也會(huì)產(chǎn)生生隱式的構(gòu)造造方法和拷貝貝構(gòu)造方法,因因?yàn)樗鼈儧](méi)有有被聲明為保保護(hù)的或私有有的。一個(gè)TTPtr對(duì)象象可以從其它它的可修改描描述符構(gòu)造,例例如:通過(guò)在在不可修改的的描述符上調(diào)調(diào)用Des()方方法,這個(gè)方方法返回一個(gè)個(gè)如
40、下所示的的TPtr對(duì)對(duì)象:_LIT(KLLiteraalDes11, Jaackdawws lovve my big ssphinxx of qquartzz);TBufC buuf(KLiiterallDes1); / TBufCC are descrribed laterrTPtr pttr(buff.Des(); / Coppy connstrucction; can modiffy thee dataa in bbufTInt leength = ptrr.Lenggth(); / LLengthh = 377TInt maaxLenggth = ptr.MMaxLenngth();
41、/ Maximmum leength = 60, as ffor buufTUint8* memooryLoccationn; / Validd poinnter iinto mmemoryy.TInt leen = 112; / Lenggth off dataa to bbe reppresenntedTInt maaxLen = 32; / MMaximuum lenngth tto be repreesenteed/ Consstructt a poointerr desccriptoor froom a ppointeer intto memmoryTPtr8 mmemPtrr(me
42、mooryLoccationn, maxxLen); / llengthh = 0, max lengtth = 332TPtr8 mmemPtrr2(memmoryLoocatioon, leen, maaxLen); / lengtth = 112, maax = 332另外,TPtrr提供了賦值值運(yùn)算符=(),用來(lái)拷拷貝數(shù)據(jù)到指指針?biāo)赶虻牡膬?nèi)存(數(shù)據(jù)據(jù)源可以是可可修改、不可可修改的指針針描述符,或或以0結(jié)尾的的字符串)。如果要拷貝的數(shù)據(jù)的長(zhǎng)度超過(guò)了描述符的最大長(zhǎng)度,會(huì)引發(fā)一個(gè)系統(tǒng)異常。像TPtrC一樣,TPtr也定義了一個(gè)Set()方法,用來(lái)改變描述符所指向的數(shù)據(jù)。_LIT(KLLit
43、eraalDes11, Jaackdawws lovve my big ssphinxx of qquartzz);TBufC buuf(KLiiterallDes1); / TBufCC are descrribed laterrTPtr pttr(buff.Des(); / Poiints tto thee conttents of buufTUint166* memmoryLoocatioon; / Valiid poiinter into memorry.TInt maaxLen = 40; / MMaximuum lenngth tto be repreesenteedTPtr me
44、emPtr(memorryLocaation, maxLLen); / leength = 12, max lengtth = 440/ Copyy and replaacememPtr = ptrr; / memPttr datta is KLiteeralDees1 (337 byttes), maxLeength = 40_LIT(KLLiteraalDes22, Thhe quiick brrown ffox juumps oover tthe laazy doog);TBufC bbuf2(KKLiterralDess2); / TBuufC arre desscribeed lat
45、terTPtr pttr2(buuf2.Dees(); / PPointss to tthe daata inn buf/ Repllace wwhat pptr pooints toptr.Sett(ptr22); / ptr pointts to conteents oof buff2, maax lenngth = 100memPtr = ptrr2; / Atteempt tto upddate mmemPtrr whicch pannics bbecausse thee/ conttents of pttr2 (443 byttes) eexceedds maxx lenggth o
46、ff memPPtr (440 byttes)您一定不要混淆淆了Set()方方法和=()賦值操作。前前者將描述符符的指針重置置,使它指向向新的數(shù)據(jù)區(qū)區(qū)域,而后者者將數(shù)據(jù)拷貝貝到描述符中中,一般來(lái)說(shuō)說(shuō),這會(huì)更改改描述符的長(zhǎng)長(zhǎng)度,但不會(huì)會(huì)更改它的最最大長(zhǎng)度值。3.5 基于棧棧(stacck-bassed)的緩緩沖區(qū)描述符符基于緩沖區(qū)的描描述符也可以以分為可修改改的TBuff和不可修改改TBufCC的兩種類型型。對(duì)這種描描述符來(lái)講,字字符串?dāng)?shù)據(jù)本本身就是描述述符的一部分分。下圖給出出了描述符的的內(nèi)存布局:iLength 12iLength 12iMaxLengthHello World!TBufiL
47、ength 12Hello World!TBufC這兩種描述符通通常用來(lái)存儲(chǔ)儲(chǔ)定長(zhǎng)的或相相對(duì)較小的字字符串,常用用來(lái)存放長(zhǎng)度度小于2566個(gè)字符的文文件名。類似似于C語(yǔ)言中中的charr,但是是,它們具有有檢查內(nèi)存溢溢出的功能。TBufCTBufC是不可修修改的緩沖區(qū)區(qū)類型,它主主要用來(lái)存放放字符串常量量或是二進(jìn)制制數(shù)據(jù)。該類類從TBuffCBasee類派生,尖尖括號(hào)內(nèi)內(nèi)的數(shù)字表示示分配給該描描述符的數(shù)據(jù)據(jù)區(qū)的大小。它定義了一些構(gòu)造方法,允許從其它的描述符或以0結(jié)尾的字符串構(gòu)造。也允許創(chuàng)建一個(gè)空的描述符,然后再填充。由于該描述符的的數(shù)據(jù)是不可可修改的,它它的整個(gè)內(nèi)容容可以被置換換(通過(guò)該類類的
48、所定義的的賦值操作),用用來(lái)置換的數(shù)數(shù)據(jù)可以是其其它的不可修修改的描述符符或是0結(jié)尾尾的字符串,但但是,無(wú)論是是何種情況,新新數(shù)據(jù)的長(zhǎng)度度都不能超過(guò)過(guò)長(zhǎng)度n(也也就是創(chuàng)建該該類的時(shí)候指指定的模板參參數(shù))。_LIT(KPPalinddrome, Sattan, ooscilllate mmy mettallicc sonaatas);TBufC buuf1(KPPalinddrome); / Consttructeed froom litteral descrriptorrTBufC buuf2(buuf1); / Coonstruucted from buf1/ Consstructted f
49、rrom a NULL-termiinatedd C sttringTBufC buuf3(TTText*)Nevver oddd or even);TBufC buuf4; / Connstruccted eempty, lenggth = 0/ Copyy and replaacebuf4 = buf1; / bbuf4 ccontaiins daata coopied from buf1, lenggth moodifieedbuf1 = buf3; / bbuf1 ccontaiins daata coopied from buf3, lenggth moodifieedbuf3 =
50、buf2; / PPanic! Max lengtth of buf3 is innsuffiicientt for buf2 data該描述符中的數(shù)數(shù)據(jù)可以被整整體置換,但但不能被直接接修改,但有有時(shí)候我們的的確需要修改改緩存區(qū)中的的數(shù)據(jù),該怎怎么辦呢?系系統(tǒng)提供了另另一種途徑來(lái)來(lái)修改數(shù)據(jù)。該該類定義了DDes()方方法,它為緩緩存區(qū)中的數(shù)數(shù)據(jù)返回一個(gè)個(gè)可修改的指指針描述符(TTPtr)。我我們可以通過(guò)過(guò)這個(gè)指針描描述符間接地地修改緩沖區(qū)區(qū)中的數(shù)據(jù)。當(dāng)當(dāng)數(shù)據(jù)通過(guò)指指針描述符被被修改以后,指指針描述符和和緩沖區(qū)描述述符中的iLLengthh的值會(huì)跟著著改變,但要要記住,緩存存區(qū)描述符的的長(zhǎng)度值
51、只可可能減小,而而是不可能增增大的,因?yàn)闉?,描述符類類是不提供?nèi)內(nèi)存管理管理理功能的。_LIT8(KKPalinndromee, Saatan, oscilllate my meetalliic sonnatas);TBufC8 bbuf(KPPalinddrome); / Consttructeed froom litteral descrriptorrTPtr8 pptr(buuf.Dess(); / daata iss the strinng in buf, max llengthh = 400/ Illuustrattes thhe usee of pptr too copyy and
52、 replaace coontentts of bufptr = (TTextt8*)DDo Geeese seee Godd?;ASSERT(ptr.LLengthh()=bbuf.Leength();_LIT8(KKPalinndromee2, AAre wee not drawnn onwaard, wwe feww, draawn onnward tonew eraa?);ptr = KKPalinndromee2; / Paniic! KPPalinddrome22 exceeeds mmax leength of pttr(=400)TBuf這也是一個(gè)模板板類,它是一一個(gè)可修改的的
53、緩沖區(qū)描述述符類,后面面的表表示緩沖區(qū)大大小。TBuuf從TBuufBasee類派生,而而TBufBBase是從從TDes派派生的,因此此,它繼承了了TDes和和TDesCC類所有的方方法。像TBBufC一樣,TTBuf也定義了了一系列的構(gòu)構(gòu)造方法和賦賦值操作。對(duì)對(duì)所有的描述述符類型來(lái)講講,內(nèi)存管理理是您的責(zé)任任,盡管這個(gè)個(gè)緩沖區(qū)中的的數(shù)據(jù)是可修修改的,但它它的長(zhǎng)度不能能超過(guò)在構(gòu)造造方法中所給給定的最大值值(n)。假假如緩沖區(qū)的的內(nèi)容需要擴(kuò)擴(kuò)展,那么您您必須決定是是在編譯的時(shí)時(shí)候就給定一一個(gè)足夠大的的值,或是在在運(yùn)行的時(shí)候候動(dòng)態(tài)分配內(nèi)內(nèi)存。但無(wú)論論哪種情況,都都要確保數(shù)據(jù)據(jù)長(zhǎng)度不要超超過(guò)緩存區(qū)
54、的的最大長(zhǎng)度。如果需要使用動(dòng)動(dòng)態(tài)分配的內(nèi)內(nèi)存,您可以以使用基于堆堆的描述符,這這個(gè)我們?cè)诤蠛竺嬉v到。要要是您覺(jué)得管管理內(nèi)存分配配的任務(wù)太過(guò)過(guò)繁重,您也也可以選擇使使用動(dòng)態(tài)數(shù)組組。不過(guò),您您應(yīng)當(dāng)記住,使使用動(dòng)態(tài)數(shù)組組的額外開(kāi)銷銷是很高的。_LIT(KPPalinddrome, Sattan, ooscilllate mmy mettallicc sonaatas);TBuf buff1(KPaalindrrome); / CConstrructedd fromm liteeral ddescriiptorTBuf buff2(buff1); / Connstruccted ffrom ccon
55、staant buuffer descrriptorrTBuf8 buuf3(TTText88*)Doo Geesse seee God?); / froom C sstringgTBuf buff4; / Consstructted emmpty, lengtth = 00, maxximum lengtth = 440/ Illuustratte coppy andd repllacebuf4 = buf2; / bbuf2 ccopiedd intoo buf44, upddatingg lenggth annd maxx lenggthbuf3 = (TTexxt8*)Murdeer
56、forr a jaar of red rrum; / uppdatedd fromm C sttring3.6 基于堆堆的(Heaap-Bassed)緩沖沖區(qū)描述符當(dāng)您要使用非常常長(zhǎng)的字符串串時(shí),有另外外一種選擇:基于堆的描描述符。它能能擁有比它的的創(chuàng)建者更長(zhǎng)長(zhǎng)的生存期。當(dāng)當(dāng)您在編譯的的時(shí)候還不能能確定緩沖區(qū)區(qū)長(zhǎng)度的時(shí)候候,堆描述符符也是很有用用的,這時(shí),它它的作用相當(dāng)當(dāng)于C語(yǔ)言中中的mallloc。HBufC也許您已經(jīng)發(fā)現(xiàn)現(xiàn),HBuffC的類名以以“H”開(kāi)頭,這不不符合Symmbian系系統(tǒng)中慣用的的命名習(xí)慣。這這的確是一個(gè)個(gè)特例,“H”表示這個(gè)類類一般是在堆堆(Heapp)上分配的的。HB
57、uffC定義了靜靜態(tài)的NewwL()方法法,用來(lái)在堆堆上創(chuàng)建一個(gè)個(gè)緩存區(qū)。正正如您所見(jiàn)到到,HBuffC中的字母母“C”表示這個(gè)表表述符是不可可修改的。對(duì)對(duì)該類的操作作幾乎和TBBufC一樣:該該類提供了一一套賦值操作作,允許整個(gè)個(gè)緩沖區(qū)中的的內(nèi)容被替換換掉;同樣,新新內(nèi)容的長(zhǎng)度度不能超過(guò)緩緩存區(qū)的大小小,否則會(huì)引引起系統(tǒng)異常常;通過(guò)調(diào)用用Des()方法,可以以返回一個(gè)可可修改的指針針描述符(TTPtr),可可以通過(guò)這個(gè)個(gè)指針描述符符來(lái)更改緩沖沖區(qū)中的內(nèi)容容。_LIT(KPPalinddrome, Do Geesee see God?);TBufC sttackBuuf(KPaalindrro
58、me);/ Alloocatess an eempty heap descrriptorr of mmax leength 20HBufC* heapBBuf = HBufCC:NewwLC(200);TInt leength = heaapBuf-Lenggth();/ Cuurrentt lenggth = 0TPtr pttr(heaapBuf-Des(); / Moddificaation of thhe heaap desscripttorptr = sstackBBuf; / Coppies sstackBBuf coontentts intto heaapBuflength =
59、heaapBuf-Lenggth(); / llengthh = 177HBufC* heapBBuf2 = stacckBuf.AlloccLC(); / FFrom sstack buffeerlength = heaapBuf22-Lenngth(); / lengtth = 117_LIT(KPPalinddrome22, Paalindrrome);*heapBuuf2 = KPaliindromme2; / Coppy andd repllace ddata iin heaapBuf22length = heaapBuf22-Lenngth(); / lengtth = 110Cl
60、eanuppStackk:PoppAndDeestroyy(2, hheapBuuf);記住,堆描述符符可以按您的的要求的尺寸寸動(dòng)態(tài)分配內(nèi)內(nèi)存,但它不不會(huì)自動(dòng)按您您的期望更改改緩沖區(qū)的大大小。在修改改緩存區(qū) 的的內(nèi)容之前,您您要確保緩存存區(qū)的內(nèi)存是是足夠的。為為了幫您簡(jiǎn)化化這些操作,HHBufC提提供的一套R(shí)ReAlloocL()方方法,它可以以用來(lái)擴(kuò)展堆堆的緩存區(qū)(這這個(gè)操作有可可能會(huì)使緩沖沖區(qū)從一個(gè)內(nèi)內(nèi)存區(qū)域搬到到另一個(gè)區(qū)域域)。If the HBufCC* is storeed on the ccleanuup staack, mmovingg the pointter ass a re
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人項(xiàng)目合作合同模板
- 制作手冊(cè)合同模板
- 品牌宣傳活動(dòng)合同范例
- 工作牌合同范例
- 協(xié)會(huì)合作合同范例
- 京能集團(tuán)合同范例
- 德惠網(wǎng)紅民宿加盟合同模板
- 店家合作合同范例
- 商用光伏合同模板
- 供銷協(xié)議合同范例代銷
- 2023-2024學(xué)年第一學(xué)期上海市奉賢區(qū)九年級(jí)八校聯(lián)考語(yǔ)文期中試卷
- 項(xiàng)目組織管理機(jī)構(gòu)及人員配備(完整版)
- 機(jī)械設(shè)備:低空經(jīng)濟(jì)系列報(bào)告(一):他山之石-Joby的前世今生
- 信息化作戰(zhàn)平臺(tái)
- 眩暈病個(gè)案護(hù)理
- 幕墻施工重難點(diǎn)分析及解決措施
- 《Python程序設(shè)計(jì)案例教程》 課件 4.3字典
- 環(huán)境測(cè)評(píng)行業(yè)分析
- 2024年武警部隊(duì)招聘專業(yè)技能類文職人員1824人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 人工智能行業(yè)的創(chuàng)新思維培訓(xùn)與發(fā)展
- 肝穿刺病人術(shù)后的護(hù)理措施
評(píng)論
0/150
提交評(píng)論