使用new分配記憶體、建立動態陣列、
阿新 • • 發佈:2019-01-06
1、使用new來分配記憶體
程式設計師需要告訴new,需要為哪種資料型別分配記憶體;new將找到一個長度正確的記憶體塊,並返回該記憶體塊的地址,
程式設計師的責任是將改地址賦給一個指標。
int *pn = new int;
new int告訴程式,需要儲存int型別的記憶體,系統動態分配適合大小的記憶體,並將地址返回給pn,通過pn指標可
操作記憶體中的值。
注意,使用new分配的動態記憶體要用delete刪除,對應格式:
delete pn;
2、使用new來建立動態陣列
C++中,建立動態陣列比較容易,只要將陣列的資料型別和元素數目告訴給new即可。格式如下:
int *psome = new int [10];
new運算子返回第一個元素的地址,並賦給psome指標。
注意:使用new分配的動態陣列在使用完之後要用另一種格式的delete刪除,如下:
delete [] psome;
方括號告訴程式,釋放的應當是整個陣列,而不僅是指標指向的元素。
那麼,建立的動態陣列如何使用呢,我們完全可以把它當做陣列處理,p[0]、p[1]、p[2]分別是其第0、1、2個元素。
3、使用new來為類申請動態記憶體
我們拿string類作為例子(我是參考的C++primer,所以參考的它的說法)
string * favorite = new string(saying[choice]);
為string的類建立動態記憶體,這裡需要特別注意:其中saying[choice]是string的一個物件。而string類中也含有new申請的動態記憶體用來儲存字串str;這裡使用new
(1) 這裡的new不是要為儲存的字串分配記憶體,而是為物件分配記憶體;而為物件分配的動態記憶體是用來儲存str字串指標以及普通成員的指標,這樣的的話,物件內部成員的變化都會被物件的指標感知到。
(2)由於分配的物件僅為一個,並不是物件陣列(如 string temp[20];宣告的就是物件陣列),因此在釋放記憶體時格式為
delete favorite;
而不是
delete [] favorite;