C++使用new來創建動態數組


  如果程序只需要一個值,則可能會聲明一個簡單變量,因為對於管理一個小型數據對象來說,這樣做比使用new和指針更簡單,盡管給人留下的印象不那么深刻。通常,對於大型數據(如數組、字符串和結構),應使用new,這正是new的用武之地。例如,假設要編寫一個程序,它是否需要數組取決於運行時用戶提供的信息。如果通過聲明來創建數組,則在程序被編譯時將為它分配內存空間。不管程序最終是否使用數組,數組都在那里,它占用了內存。在編譯時給數組分配內存被稱為靜態聯編(static binding),意味着數組是在編譯時加入到程序中的。但使用new時,如果在運行階段需要數組,則創建它;如果不需要,則不創建。還可以在程序運行時選擇數組的長度。這被稱為動態聯編(dynamic binding),意味着數組是在程序運行時創建的。這種數組叫做動態數組(dynamic array)。使用靜態聯編時,必須在編寫程序時指定數組的長度;使用動態聯編時,程序將在運行時確定數組的長度。

  下面來看一下關於動態數組的兩個基本問題:如何使用C++的new運算符創建數組以及如何使用指針訪問元素。

  1、使用new創建動態數組

  在C++中,創建動態數組很容易;只要將數組的元素類型和元素數目告訴new即可。必須在類型名后加上方括號,其中包含元素數目。例如,要創建一個包含10個int元素的數組,可以這樣做:

  int * psome = new int [10];

  new運算符返回第一個元素的地址。在這個例子中,該地址被賦給指針psome。

  當程序使用完new分配的內存塊時,應使用delete釋放它們。然而,對於使用new創建的數組,應使用另一種 格式的delete來釋放:  

  delete [] psome;    // free a dynamic array

  方括號告訴程序,應釋放整個數組,而不僅僅是指針指向的元素。請注意delete和指針之間的方括號。如果使用new時,不帶方括號,則使用delete也不應帶方括號。如果使用new時帶方括號,則使用delete時也應帶方括號。C++的早期版本無法識別方括號表示法。然而,對於ANSI/ISO標准來說,new與delete的格式不匹配導致的后果是不確定的,這意味着程序員不能依賴於某種特定的行為。下面是一個例子:

  int * pt = new int;

  short * ps = new short [500];

  delete [] pt;

  delete ps;

  總之,使用new和delete時,應遵守以下規則。

  ~不要使用delete來釋放不是new分配的內存。

  ~不要使用delete釋放用一個內存塊兩次。

  ~如果使用new[]為數組分配內存,則應使用delete [ ] 來釋放。

  ~如果使用new 為一個實體分配內存,則應使用delete(沒有方括號)來釋放。

  ~對空指針應用delete是安全的。

  

  為數組分配內存的通用格式如下:

  type_name * pointer_name = new type_name [num_elements];

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM