1. 程式人生 > >使用new分配記憶體、建立動態陣列、

使用new分配記憶體、建立動態陣列、

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]);

其中saying[choice]是string的一個物件。而string類中也含有new申請的動態記憶體用來儲存字串str;這裡使用new

為string的類建立動態記憶體,這裡需要特別注意:

      (1) 這裡的new不是要為儲存的字串分配記憶體,而是為物件分配記憶體;而為物件分配的動態記憶體是用來儲存str字串指標以及普通成員的指標,這樣的的話,物件內部成員的變化都會被物件的指標感知到。

(2)由於分配的物件僅為一個,並不是物件陣列(如 string temp[20];宣告的就是物件陣列),因此在釋放記憶體時格式為

delete favorite;

而不是

      delete [] favorite;