news,new這個(gè)很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!
【資料圖】
1、開(kāi)辟單變量地址空間new int; //開(kāi)辟一個(gè)存放數(shù)組的存儲(chǔ)空間,返回一個(gè)指向該存儲(chǔ)空間的地址.int *a = new int 即為將一個(gè)int類型的地址賦值給整型指針a. 2)int *a = new int(5) 作用同上,但是同時(shí)將整數(shù)賦值為5。
2、2、開(kāi)辟數(shù)組空間要訪問(wèn)new所開(kāi)辟的結(jié)構(gòu)體空間,無(wú)法直接通過(guò)變量名進(jìn)行,只能通過(guò)賦值的指針進(jìn)行訪問(wèn)。
3、用new可以動(dòng)態(tài)開(kāi)辟,撤銷地址空間。
4、在編程序時(shí),若用完一個(gè)變量,下次需要再用,可以在每次開(kāi)始使用時(shí)開(kāi)辟一個(gè)空間,在用完后撤銷它。
5、擴(kuò)展資料:定位放置new的作用:在 C++ 中,通過(guò) new 運(yùn)算符來(lái)實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配。
6、new操作符從自由存儲(chǔ)區(qū)(free store)上為對(duì)象動(dòng)態(tài)分配內(nèi)存空間,凡是通過(guò)new操作符進(jìn)行內(nèi)存申請(qǐng),該內(nèi)存即為自由存儲(chǔ)區(qū)。
7、2、new操作符內(nèi)存分配成功時(shí),返回的是對(duì)象類型的指針,類型嚴(yán)格與對(duì)象匹配,無(wú)須進(jìn)行類型轉(zhuǎn)換,故new是符合類型安全性的操作符。
8、3、new內(nèi)存分配失敗時(shí),會(huì)拋出bac_alloc異常,它不會(huì)返回NULL;malloc分配內(nèi)存失敗時(shí)返回NULL。
9、參考資料來(lái)源:百度百科-定位放置new "1.new()分配這種類型的1個(gè)大小的內(nèi)存空間,并以括號(hào)中的值來(lái)初始化這個(gè)變量;2.new[]分配這種類型的n個(gè)大小的內(nèi)存空間,并用默認(rèn)構(gòu)造函數(shù)來(lái)初始化這類變量;#include
10、例如:int*p1=newint[10];返回的是1個(gè)指向int的指針int*int(*p2)[10]=newint[2][10];new了1個(gè)二維數(shù)組,去掉最左邊那一維[2],剩下int[10],因此返回的是1個(gè)指向int[10]這種一維數(shù)組的指針int(*)[10].int(*p3)[2][10]=newint[5][2][10];new了1個(gè)三維數(shù)組,去掉最左邊那一維[5],還有int[2][10],因此返回的是1個(gè)指向二維數(shù)組int[2][10]這種類型的指針int(*)[2][10].#include
11、這2個(gè)英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。
12、new表達(dá)式比較常見(jiàn),也最常用,例如:string*ps=newstring("abc");上邊這個(gè)new表達(dá)式完成了兩件事情:申請(qǐng)內(nèi)存和初始化對(duì)象。
13、new操作符類似于C語(yǔ)言中的malloc,只是負(fù)責(zé)申請(qǐng)內(nèi)存,例如:void*buffer=operatornew(sizeof(string));注意這里多了1個(gè)operator。
14、這是new的第二個(gè)用法,也算比較常見(jiàn)吧。
15、那么第三個(gè)用法就不很常見(jiàn)了,官方的說(shuō)法是placementnew,它用于在給定的內(nèi)存中初始化對(duì)象,也就是說(shuō)你手中已有一塊閑置的內(nèi)存,例如:void*buffer=operatornew(sizeof(string));//那么目前buffer是你所擁有閑置內(nèi)存的指針buffer=new(buffer)string("abc");//調(diào)出使用了placementnew,在buffer所指向的內(nèi)存中初始化string類型的對(duì)象,初始值是"abc"事實(shí)上,placementnew也是new表達(dá)式的一種,可是比普通的new表達(dá)式多了1個(gè)參數(shù),當(dāng)然完成的操作和返回值也不一樣。
16、因此上邊new的第一種用法可以分解2個(gè)動(dòng)作,分別為后面的兩種用法。
17、"1. new() 分配這種類型的一個(gè)大小的內(nèi)存空間,并以括號(hào)中的值來(lái)初始化這個(gè)變量;2. new[] 分配這種類型的n個(gè)大小的內(nèi)存空間,并用默認(rèn)構(gòu)造函數(shù)來(lái)初始化這些變量;#include
18、例如:int *p1 = new int[10];返回的是一個(gè)指向int的指針int*int (*p2)[10] = new int[2][10];new了一個(gè)二維數(shù)組, 去掉最左邊那一維[2], 剩下int[10], 所以返回的是一個(gè)指向int[10]這種一維數(shù)組的指針int (*)[10].int (*p3)[2][10] = new int[5][2][10]; new了一個(gè)三維數(shù)組, 去掉最左邊那一維[5], 還有int[2][10], 所以返回的是一個(gè)指向二維數(shù)組int[2][10]這種類型的指針int (*)[2][10].#include
19、這兩個(gè)英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。
20、new表達(dá)式比較常見(jiàn),也最常用,例如:string* ps = new string("abc");上面這個(gè)new表達(dá)式完成了兩件事情:申請(qǐng)內(nèi)存和初始化對(duì)象。
21、new操作符類似于C語(yǔ)言中的malloc,只是負(fù)責(zé)申請(qǐng)內(nèi)存,例如:void* buffer = operator new(sizeof(string));注意這里多了一個(gè)operator。
22、這是new的第二個(gè)用法,也算比較常見(jiàn)吧。
23、那么第三個(gè)用法就不很常見(jiàn)了,官方的說(shuō)法是placement new,它用于在給定的內(nèi)存中初始化對(duì)象,也就是說(shuō)你手中已有一塊閑置的內(nèi)存,例如:void* buffer = operator new(sizeof(string));//那么現(xiàn)在buffer是你所擁有閑置內(nèi)存的指針buffer = new(buffer) string("abc"); //調(diào)用了placement new,在buffer所指向的內(nèi)存中初始化string類型的對(duì)象,初始值是"abc"事實(shí)上,placement new也是new表達(dá)式的一種,但是比普通的new表達(dá)式多了一個(gè)參數(shù),當(dāng)然完成的操作和返回值也不同。
24、因此上面new的第一種用法可以分解兩個(gè)動(dòng)作,分別為后面的兩種用法。
本文到此分享完畢,希望對(duì)大家有所幫助。
關(guān)鍵詞: