在堆上分配內(nèi)存
unsigned long *pA = new unsigned long; *pA = 10;
unsigned long *pB = new unsigned long[ *pA ];
上面就申請(qǐng)了兩塊內(nèi)存,pA所指的內(nèi)存(即pA的值所對(duì)應(yīng)的內(nèi)存)是4字節(jié)大小,而pB所指的內(nèi)存是4*10=40字節(jié)大小。應(yīng)該注意,由于new是一個(gè)操作符,其結(jié)構(gòu)為new <類型名>[<整型數(shù)字>]。它返回指針類型的數(shù)字,其中的<類型名>指明了什么樣的指針類型,而后面方括號(hào)的作用和定義數(shù)組時(shí)一樣,用于指明元素的個(gè)數(shù),但其返回的并不是數(shù)組類型,而是指針類型。
delete pA; delete[] pB;
注意delete操作符并不返回任何數(shù)字,但是其仍被稱作操作符,看起來(lái)它應(yīng)該被叫做語(yǔ)句更加合適,但為了滿足其依舊是操作符的特性,C++提供了一種很特殊的數(shù)字類型——void。其表示無(wú),即什么都不是,這在《C++從零開始(七)》中將詳細(xì)說(shuō)明。因此delete其實(shí)是要返回?cái)?shù)字的,只不過(guò)返回的數(shù)字類型為void罷了。
注意上面對(duì)pA和pB的釋放不同,因?yàn)閜A按照最開始的書寫,是new unsigned long返回的,而pB是new unsigned long[ *pA ]返回的。所以需要在釋放pB時(shí)在delete的后面加上“[]”以表示釋放的是數(shù)組,不過(guò)在VC中,不管前者還是后者,都能正確釋放內(nèi)存,無(wú)需“[]”的介入以幫助編譯器來(lái)正確釋放內(nèi)存,因?yàn)橐訵indows為平臺(tái)而開發(fā)程序的VC是按照Windows操作系統(tǒng)的方式來(lái)進(jìn)行內(nèi)存分配的,而Windows操作系統(tǒng)在釋放內(nèi)存時(shí),無(wú)需知道欲釋放的內(nèi)存塊的長(zhǎng)度,因?yàn)槠湟呀?jīng)在內(nèi)部記錄下來(lái)(這種說(shuō)法并不準(zhǔn)確,實(shí)際應(yīng)是C運(yùn)行時(shí)期庫(kù)干了這些事,但其又是依賴于操作系統(tǒng)來(lái)干的,即其實(shí)是有兩層對(duì)內(nèi)存管理的包裝,在此不表)。
unsigned long *pB = new unsigned long[ *pA ];
上面就申請(qǐng)了兩塊內(nèi)存,pA所指的內(nèi)存(即pA的值所對(duì)應(yīng)的內(nèi)存)是4字節(jié)大小,而pB所指的內(nèi)存是4*10=40字節(jié)大小。應(yīng)該注意,由于new是一個(gè)操作符,其結(jié)構(gòu)為new <類型名>[<整型數(shù)字>]。它返回指針類型的數(shù)字,其中的<類型名>指明了什么樣的指針類型,而后面方括號(hào)的作用和定義數(shù)組時(shí)一樣,用于指明元素的個(gè)數(shù),但其返回的并不是數(shù)組類型,而是指針類型。
delete pA; delete[] pB;
注意delete操作符并不返回任何數(shù)字,但是其仍被稱作操作符,看起來(lái)它應(yīng)該被叫做語(yǔ)句更加合適,但為了滿足其依舊是操作符的特性,C++提供了一種很特殊的數(shù)字類型——void。其表示無(wú),即什么都不是,這在《C++從零開始(七)》中將詳細(xì)說(shuō)明。因此delete其實(shí)是要返回?cái)?shù)字的,只不過(guò)返回的數(shù)字類型為void罷了。
注意上面對(duì)pA和pB的釋放不同,因?yàn)閜A按照最開始的書寫,是new unsigned long返回的,而pB是new unsigned long[ *pA ]返回的。所以需要在釋放pB時(shí)在delete的后面加上“[]”以表示釋放的是數(shù)組,不過(guò)在VC中,不管前者還是后者,都能正確釋放內(nèi)存,無(wú)需“[]”的介入以幫助編譯器來(lái)正確釋放內(nèi)存,因?yàn)橐訵indows為平臺(tái)而開發(fā)程序的VC是按照Windows操作系統(tǒng)的方式來(lái)進(jìn)行內(nèi)存分配的,而Windows操作系統(tǒng)在釋放內(nèi)存時(shí),無(wú)需知道欲釋放的內(nèi)存塊的長(zhǎng)度,因?yàn)槠湟呀?jīng)在內(nèi)部記錄下來(lái)(這種說(shuō)法并不準(zhǔn)確,實(shí)際應(yīng)是C運(yùn)行時(shí)期庫(kù)干了這些事,但其又是依賴于操作系統(tǒng)來(lái)干的,即其實(shí)是有兩層對(duì)內(nèi)存管理的包裝,在此不表)。
posted on 2008-11-26 15:40 henry08 閱讀(366) 評(píng)論(0) 編輯 收藏 引用 所屬分類: C++