日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

new和delete

發(fā)布時(shí)間:2023/12/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 new和delete 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

和 sizeof 類似,sizeof不是函數(shù),它是一個(gè)操作符,它在編譯期就完成了計(jì)算,在函數(shù)運(yùn)行期間它已經(jīng)是一個(gè)常數(shù)值了。

int a; sizeof(int) = 4; sizeof(a) = 4; sizeof a ——也是4 ?不需要括號(hào)! ? 此時(shí)要注意: sizeof int——錯(cuò)誤!此時(shí)int ?把sizeof當(dāng)成int的修飾詞;比如 ?signed int , ?register int 。。。

new 和 delete 也不是函數(shù),它們都是 C++ 定義的關(guān)鍵字,通過特定的語(yǔ)法可以組成表達(dá)式。和 sizeof 不同的是,sizeof 在編譯時(shí)候就可以確定其返回值,new 和 delete 背后的機(jī)制則比較復(fù)雜。

?

string *ps = new string("hello world");

你就可以看出 new 和 malloc 還是有點(diǎn)不同的,malloc 申請(qǐng)完空間之后不會(huì)對(duì)內(nèi)存進(jìn)行必要的初始化,而 new 可以。

?

operator new 和 operator delete

這兩個(gè)其實(shí)是 C++ 語(yǔ)言標(biāo)準(zhǔn)庫(kù)的庫(kù)函數(shù),原型分別如下:

void *operator new(size_t); //allocate an object void *operator delete(void *); //free an object void *operator new[](size_t); //allocate an array void *operator delete[](void *); //free an array

后面兩個(gè)你可以先不看,后面再介紹。前面兩個(gè)均是 C++ 標(biāo)準(zhǔn)庫(kù)函數(shù),你可能會(huì)覺得這是函數(shù)嗎?請(qǐng)不要懷疑,這就是函數(shù)!C++ Primer?一書上說這不是重載 new 和 delete 表達(dá)式(如?operator=?就是重載?=?操作符),因?yàn)?new 和 delete 是不允許重載的。但我還沒搞清楚為什么要用 operator new 和 operator delete 來(lái)命名,比較費(fèi)解。我們只要知道它們的意思就可以了,這兩個(gè)函數(shù)和 C 語(yǔ)言中的 malloc 和 free 函數(shù)有點(diǎn)像了,都是用來(lái)申請(qǐng)和釋放內(nèi)存的,并且 operator new 申請(qǐng)內(nèi)存之后不對(duì)內(nèi)存進(jìn)行初始化,直接返回申請(qǐng)內(nèi)存的指針。

?

如何申請(qǐng)和釋放一個(gè)數(shù)組?

string *psa = new string[10]; //array of 10 empty strings int *pia = new int[10];
上面在申請(qǐng)一個(gè)數(shù)組時(shí)都用到了?new []?這個(gè)表達(dá)式來(lái)完成,按照我們上面講到的 new 和 delete 知識(shí),第一個(gè)數(shù)組是 string 類型,分配了保存對(duì)象的內(nèi)存空間之后,將調(diào)用 string 類型的默認(rèn)構(gòu)造函數(shù)依次初始化數(shù)組中每個(gè)元素;第二個(gè)是申請(qǐng)具有內(nèi)置類型的數(shù)組,分配了存儲(chǔ) 10 個(gè) int 對(duì)象的內(nèi)存空間,但并沒有初始化。
delete [] psa; delete [] pia; 都用到?delete []?表達(dá)式,注意這地方的 [] 一般情況下不能漏掉!我們也可以想象這兩個(gè)語(yǔ)句分別干了什么:第一個(gè)對(duì) 10 個(gè) string 對(duì)象分別調(diào)用析構(gòu)函數(shù),然后再釋放掉為對(duì)象分配的所有內(nèi)存空間;第二個(gè)因?yàn)槭莾?nèi)置類型不存在析構(gòu)函數(shù),直接釋放為 10 個(gè) int 型分配的所有內(nèi)存空間。

轉(zhuǎn)載于:https://www.cnblogs.com/fanhaha/p/7117934.html

總結(jié)

以上是生活随笔為你收集整理的new和delete的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。