??博主主頁(yè):@??. 一懷明月??
?????專欄系列:線性代數(shù),C初學(xué)者入門訓(xùn)練,題解C,C的使用文章,「初學(xué)」C++,數(shù)據(jù)結(jié)構(gòu)
??座右銘:“不要等到什么都沒有了,才下定決心去做”
??????大家覺不錯(cuò)的話,就懇求大家點(diǎn)點(diǎn)關(guān)注,點(diǎn)點(diǎn)小愛心,指點(diǎn)指點(diǎn)??????
??new和delete?
new和delete運(yùn)算符是C++管理內(nèi)存的方式,在C語言里實(shí)現(xiàn)近似功能的函數(shù)是malloc和free。
malloc函數(shù)原型:
void* malloc(int size);
向系統(tǒng)申請(qǐng)分配指定的size字節(jié)的內(nèi)存空間,返回類型是void*類型
free函數(shù)原型:
void free(void* block);
把block所指向的空間釋放。形參是void*類型,所以free可以釋放任意類型的指針
C語言的內(nèi)存管理是通過函數(shù)進(jìn)行的,優(yōu)點(diǎn)缺點(diǎn)如下:
(1)函數(shù)返回值是void*類型,在將這個(gè)地址給指針進(jìn)行賦值時(shí),必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
(2)分配內(nèi)存單元時(shí)根據(jù)參數(shù)size的值來分配的,如果size是錯(cuò)誤的,系統(tǒng)仍然分配單元,無法檢查出錯(cuò)誤。
C++提供了簡(jiǎn)便而功能較強(qiáng)的運(yùn)算符new和delete。
new是C++新增的用來用來動(dòng)態(tài)申請(qǐng)內(nèi)存的運(yùn)算符,它的作用是申請(qǐng)到一段指定數(shù)據(jù)類型大小的內(nèi)存。
使用格式:
指針變量 =new 數(shù)據(jù)類型;
使用new分配整形內(nèi)存單元:
#include<iostream> using namespace std; int main() { ? ? int* p=nullptr; ? ? p=new int;//new將申請(qǐng)一個(gè)整形的內(nèi)存空間,將這個(gè)內(nèi)存空間的首地址存放到指針變量p中 ? ? cout<<*p<<endl; ? ? return 0; } 結(jié)果:0 向內(nèi)存動(dòng)態(tài)申請(qǐng)了一整形空間,因?yàn)闆]有給空間賦值,所以里面是隨機(jī)值,這里是0
使用new申請(qǐng)內(nèi)存更加方便,而且new返回所申請(qǐng)數(shù)據(jù)類型的指針,再將內(nèi)存的首地址給指針p時(shí)不需要強(qiáng)制類型轉(zhuǎn)換
通過new運(yùn)算符申請(qǐng)的內(nèi)存單元是當(dāng)程序運(yùn)行到包含new語句時(shí)才分配的,稱為動(dòng)態(tài)內(nèi)存的分配,這是堆上申請(qǐng)的空間,除非程序退出,才會(huì)把內(nèi)存歸還給系統(tǒng)。所以必須自己去釋放通過new得到的內(nèi)存單元
與new對(duì)應(yīng)的釋放內(nèi)存空間運(yùn)算符是delete,使用delete的格式如下:
delete 指針變量;
delete將釋放指針?biāo)赶虻膬?nèi)存單元:
#include<iostream> using namespace std; int main() { ? ? int* p=nullptr; ? ? p=new int;//new將申請(qǐng)一個(gè)整形的內(nèi)存空間,將這個(gè)內(nèi)存空間的首地址存放到指針變量p中 ? ? cout<<*p<<endl; ? ? delete p;//delete將釋放p所指向的內(nèi)存單元 ? ? p=nullptr; ? ? return 0; }
new也可以在申請(qǐng)內(nèi)存空間的同時(shí)對(duì)該內(nèi)存空間進(jìn)行初始化
指針變量=new 數(shù)據(jù)類型(初值);//傳統(tǒng)圓括號(hào)初始形式 指針變量=new 數(shù)據(jù)類型{初值};//C++11引入的列表初始化 例如: int* p=new int(520); int* p=new int{520};
new和delete除了用于分配和釋放單個(gè)變量的空間。還可以分配和釋放連續(xù)變量的存儲(chǔ)空間。例如申請(qǐng)一個(gè)數(shù)組空間,使用new[]和delete[]
new[]
指針變量=new 數(shù)據(jù)類型[元素個(gè)數(shù)]; int* p=new int[10]; 可以申請(qǐng)存放20個(gè)整數(shù)的連續(xù)空間
delete[]文章來源:http://www.zghlxwxcb.cn/news/detail-437967.html
delete []指針變量; delete []p; p=nullptr;
???????如果大家還有不懂或者建議都可以發(fā)在評(píng)論區(qū),我們共同探討,共同學(xué)習(xí),共同進(jìn)步。謝謝大家! ???????文章來源地址http://www.zghlxwxcb.cn/news/detail-437967.html
到了這里,關(guān)于C++動(dòng)態(tài)內(nèi)存開辟與釋放new和delete的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!