C/C++編程筆記:C ++中用于動(dòng)態(tài)內(nèi)存的new和delete運(yùn)算符

C / C ++中的動(dòng)態(tài)內(nèi)存分配是指程序員手動(dòng)執(zhí)行內(nèi)存分配。動(dòng)態(tài)分配的內(nèi)存在堆上分配,非靜態(tài)和局部變量在堆棧上分配內(nèi)存。

有什么應(yīng)用?
動(dòng)態(tài)分配內(nèi)存的一種用途是分配可變大小的內(nèi)存,而可變長(zhǎng)度數(shù)組除外,這是編譯器分配的內(nèi)存無(wú)法實(shí)現(xiàn)的。
最重要的用途是為程序員提供了靈活性。無(wú)論何時(shí)需要和不再需要,我們都可以自由分配和取消分配內(nèi)存。在許多情況下,這種靈活性會(huì)有所幫助。此類情況的示例是“鏈表”,“樹(shù)”等。
它與分配給普通變量的內(nèi)存有何不同?
對(duì)于“ int a”,“ char str [10]”等常規(guī)變量,將自動(dòng)分配和釋放內(nèi)存。對(duì)于動(dòng)態(tài)分配的內(nèi)存,例如“ int * p = new int [10]”,程序員有責(zé)任在不再需要時(shí)釋放內(nèi)存。如果程序員不釋放內(nèi)存,則會(huì)導(dǎo)致內(nèi)存泄漏(在程序終止之前不會(huì)釋放內(nèi)存)。
如何在C ++中分配/取消分配內(nèi)存?
C使用malloc()和calloc()函數(shù)在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存,并使用free()函數(shù)釋放動(dòng)態(tài)分配的內(nèi)存。C ++支持這些功能,并且還有兩個(gè)new和Delete運(yùn)算符,它們以更好和更輕松的方式執(zhí)行分配和釋放內(nèi)存的任務(wù)。
本文全部涉及new和delete運(yùn)算符。
new 運(yùn)算符
新的運(yùn)算符表示在免費(fèi)存儲(chǔ)上分配內(nèi)存的請(qǐng)求。如果有足夠的內(nèi)存可用,則new運(yùn)算符將初始化該內(nèi)存,并將新分配和初始化的內(nèi)存的地址返回給指針變量。
使用new運(yùn)算符的語(yǔ)法:要分配任何數(shù)據(jù)類型的內(nèi)存,語(yǔ)法為:
pointer-variable =new?data-type;
這里,pointer-variable是data-type類型的指針。數(shù)據(jù)類型可以是任何內(nèi)置數(shù)據(jù)類型,包括數(shù)組,也可以是任何用戶定義的數(shù)據(jù)類型,包括結(jié)構(gòu)和類。
int *p = NULL;
p = new int;?
初始化內(nèi)存:我們還可以使用new運(yùn)算符來(lái)初始化內(nèi)存:
指針變量?=newdata-type(value);
int *p = new int(25);
float *q = new float(75.25);
分配內(nèi)存塊:?new運(yùn)算符還用于分配data-type類型的內(nèi)存塊(數(shù)組)。
指針變量 =new?data-type[size];
其中size(一個(gè)變量)指定數(shù)組中元素的數(shù)量。
int *p = new int[10]
為int類型的10個(gè)整數(shù)連續(xù)動(dòng)態(tài)分配內(nèi)存,并將指針?lè)祷氐叫蛄械牡谝粋€(gè)元素,該元素分配給p(一個(gè)指針)。p [0]表示第一個(gè)元素,p [1]表示第二個(gè)元素,依此類推。

普通數(shù)組聲明與使用new
聲明普通數(shù)組與使用new分配內(nèi)存塊之間有區(qū)別。最重要的區(qū)別是,常規(guī)數(shù)組由編譯器釋放(如果數(shù)組是本地?cái)?shù)組,則在函數(shù)返回或完成時(shí)釋放)。但是,動(dòng)態(tài)分配的數(shù)組始終保留在那里,直到程序員將其釋放或程序終止為止。
如果運(yùn)行時(shí)沒(méi)有足夠的內(nèi)存怎么辦?
如果堆中沒(méi)有足夠的內(nèi)存來(lái)分配,則新請(qǐng)求將拋出std :: bad_alloc類型的異常,以指示失敗,除非new操作符使用了“ nothrow”,在這種情況下它將返回NULL指針。因此,最好在使用new程序之前檢查new產(chǎn)生的指針變量。

刪除運(yùn)算符
由于取消分配動(dòng)態(tài)分配的內(nèi)存是程序員的責(zé)任,因此使用C ++語(yǔ)言為程序員提供了delete運(yùn)算符。
句法:
//釋放指針變量指向的內(nèi)存
delete?指針變量;?
在這里,指針變量是指向由new創(chuàng)建的數(shù)據(jù)對(duì)象的指針。
例子:
delete?p;??delete?q;
要釋放指針變量指向的動(dòng)態(tài)分配數(shù)組,請(qǐng)使用以下形式的delete:
delete[] p;
本期的知識(shí)分享就到這里了,希望對(duì)大家有幫助~
另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~
主頁(yè)群分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
編程學(xué)習(xí)書(shū)籍分享:

編程學(xué)習(xí)視頻分享:
