您好,登錄后才能下訂單哦!
這篇文章主要介紹了C++中存儲(chǔ)方案和動(dòng)態(tài)分配的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在之前的文章當(dāng)中,我們討論了C++用來為變量分配內(nèi)存的5種方案,但是這些方案并不適用于使用new
運(yùn)算符分配的內(nèi)存,這種內(nèi)存被稱為動(dòng)態(tài)內(nèi)存。
我們?cè)谥暗奈恼庐?dāng)中也曾介紹過,動(dòng)態(tài)內(nèi)存由new
和delete
控制,而不是由作用域和鏈接性規(guī)則控制。所以我們可以在一個(gè)函數(shù)當(dāng)中分配動(dòng)態(tài)內(nèi)存,在另外一個(gè)函數(shù)中釋放。
通常C++編譯器當(dāng)中有三塊獨(dú)立的內(nèi)存,一塊用于靜態(tài)變量,一塊用于自動(dòng)變量,還有一塊用于動(dòng)態(tài)存儲(chǔ)。
雖然存儲(chǔ)方案的概念不適用于動(dòng)態(tài)內(nèi)存,但是適用于動(dòng)態(tài)內(nèi)存的自動(dòng)和靜態(tài)指針。C++ Primer
當(dāng)中有這么一個(gè)例子,我們?cè)谝粋€(gè)函數(shù)當(dāng)中有如下語句:
float * p_fees = new float[20];
很明顯,我們通過new
創(chuàng)建了一個(gè)長度為20的float
數(shù)組,這塊數(shù)組的內(nèi)存將會(huì)一直停留在內(nèi)存當(dāng)中,直到使用delete
語句釋放。但當(dāng)該函數(shù)運(yùn)行結(jié)束的時(shí)候,p_fees
這個(gè)指針將會(huì)消失。如果希望在其他地方能夠使用這個(gè)數(shù)組,需要將地址通過某種方式返回或者傳遞。
如果我們將p_fees
的鏈接性聲明為外部的,那么我們?cè)谄渌胤蕉伎梢栽L問到了,如果另外的文件當(dāng)中需要訪問,也同樣可以使用關(guān)鍵字extern
。
前面講了使用new
申請(qǐng)內(nèi)存的方法,如果我們想要在分配內(nèi)存的同時(shí)完成變量的初始化,應(yīng)該怎么辦呢?
如果要為內(nèi)置的標(biāo)量類型分配空間并初始化,可以在類型名后面加上初始值,并將它用括號(hào)括起來:
int *pi = new int(3); double *pd = new double(99.9);
如果我們要初始化結(jié)構(gòu)體或者是數(shù)組,則需要使用大括號(hào)的列表初始化,這需要編譯器支持C++11,這是C++11中的新特性:
struct P { int x, y; }; P *p = new P{3, 4}; int *arr = new int[4] {2, 3, 4, 5};
在C++11當(dāng)中也支持對(duì)單值變量使用列表初始化:
double *pd = new double(99.99);
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++中存儲(chǔ)方案和動(dòng)態(tài)分配的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。