C++基础学习7:new/delete操作符
生活随笔
收集整理的這篇文章主要介紹了
C++基础学习7:new/delete操作符
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在C語(yǔ)言中,動(dòng)態(tài)分配和釋放內(nèi)存的函數(shù)是malloc、calloc和free,而在C++語(yǔ)言中,new、new[]、delete和delete[]操作符通常會(huì)被用來(lái)動(dòng)態(tài)地分配內(nèi)存和釋放內(nèi)存。需要注意的是new、new[]、delete和delete[]是操作符,而非函數(shù);new和delete也是C++的關(guān)鍵字。操作符new用于動(dòng)態(tài)分配單個(gè)空間,而new[]則是用于動(dòng)態(tài)分配一個(gè)數(shù)組,操作符delete用于釋放由new分配的空間,
delete[]則用于釋放new[]分配的一個(gè)數(shù)組。"new 數(shù)據(jù)類型" 即為new關(guān)鍵字的基本語(yǔ)法,可以動(dòng)態(tài)的分配一個(gè)數(shù)據(jù)類型大小的空間。例如:
int *p = new int;
為p指針?lè)峙淞艘粋€(gè)int型的空間。new操作符根據(jù)請(qǐng)求分配的數(shù)據(jù)類型來(lái)推斷所需的空間大小。new[] 則是為了分配一個(gè)數(shù)組的空間。具體語(yǔ)法如:
int *A = new int[10];
該語(yǔ)句為A指針?lè)峙淞艘粋€(gè)數(shù)組的空間,該數(shù)組有10個(gè)int數(shù)組成員,如果分配成功,則p指針指向首地址,
并且數(shù)組10個(gè)成員的地址是連續(xù)的,其地址分別為A、A+1、A+2、……、A+9。delete操作符則專門(mén)用于釋放由new分配的動(dòng)態(tài)存儲(chǔ)空間,在前面我們?yōu)閜分配了一個(gè)int型的空間,我們可以按照如下的方式釋放它: delete p;delete[] 則用于釋放掉由new[]分配的數(shù)組空間,在前面我們?yōu)锳指針?lè)峙淞耸畟€(gè)int單元,構(gòu)成了一個(gè)數(shù)組,可以按照如下方式釋放掉該空間: delete[] p;為了避免內(nèi)存泄露,通常new和delete、new[]和delete[]操作符應(yīng)該成對(duì)出現(xiàn),并且不要將這些操作符與C語(yǔ)言中動(dòng)態(tài)分配內(nèi)存和釋放內(nèi)存的幾個(gè)函數(shù)一起混用。建議在編寫(xiě)C++程序時(shí)盡量使用new、new[]、delete和delete[]操作符進(jìn)行動(dòng)態(tài)內(nèi)存分配和釋放,而不要使用C語(yǔ)言中內(nèi)存分配和釋放的函數(shù),這是因?yàn)閚ew、new[]、delete和delete[]操作符可以使用C++的一些特性,如類的構(gòu)造函數(shù)和析構(gòu)函數(shù),能夠更好地管理C++程序的內(nèi)存。堆是操作系統(tǒng)維護(hù)的一塊內(nèi)存,而自由存儲(chǔ)是C++中通過(guò)new與delete動(dòng)態(tài)分配和釋放對(duì)象的抽象概念。堆與自由存儲(chǔ)區(qū)并不等價(jià)。"在C++中,內(nèi)存區(qū)分為5個(gè)區(qū),分別是堆、棧、自由存儲(chǔ)區(qū)、全局/靜態(tài)存儲(chǔ)區(qū)、常量存儲(chǔ)區(qū)"。"malloc在堆上分配的內(nèi)存塊,使用free釋放內(nèi)存,而new所申請(qǐng)的內(nèi)存則是在自由存儲(chǔ)區(qū)上,使用delete來(lái)釋放。"
?
轉(zhuǎn)載于:https://www.cnblogs.com/ciyeer/p/8888654.html
總結(jié)
以上是生活随笔為你收集整理的C++基础学习7:new/delete操作符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 下安装LEMP环境 实战
- 下一篇: SpringCloud(六) Hystr