c++中 new的使用方法

c++中,new的用法很靈活,這裏進行了簡單的總結

1. new( ) 分配這種類型的一個大小的內存空間,並以括號中的值來初始化這個變量;
2. new[ ] 分配這種類型的n個大小的內存空間,並用默認構造函數來初始化這些變量;  
char* p=new char[6];     strcpy(p,"Hello");  
3. 當使用new運算符定義一個多維數組變量或數組對象時,它產生一個指向數組第一個元素的指針,返回的類型保持了除最左邊維數外的所有維數。例如:  
 int *p1 = new int[10];   
返回的是一個指向int的指針int*  
int (*p2)[10] = new int[2][10]; 
new了一個二維數組, 去掉最左邊那一維[2], 剩下int[10], 所以返回的是一個指向int[10]這種一維數組的指針int (*)[10].  
int (*p3)[2][10] = new int[5][2][10];  new了一個三維數組, 去掉最左邊那一維[5], 還有int[2][10], 所以返回的是一個指向二維數組int[2][10]這種類型的指針int (*)[2][10].

C++中用new動態創建二維數組的格式一般是這樣: TYPE (*p)[N] = new TYPE [][N]; 其中,TYPE是某種類型,N是二維數組的列數。採用這種格式,列數必須指出,而行數無需指定。在這裏,p的類型是TYPE*[N],即是指向一個有N列元素數組的指針。
 還有一種方法,可以不指定數組的列數:
 int **p; p = new int*[10];    //注意,int*[10]表示一個有10個元素的指針數組
 for (int i = 0; i != 10; ++i) 
  { p[i] = new int[5]; }

4.new創建對象
  new創建類對象與不new區別
下面是自己總結的一些關於new創建對象特點:
new創建對象需要指針接收,一處初始化,多處使用
new創建對象使用完需delete銷燬
new創建對象直接使用堆空間,而局部不用new定義對象則使用棧空間
new對象指針用途廣泛,比如作爲函數返回值、函數參數等
頻繁調用場合並不適合new,就像new申請和釋放內存一樣

new創建對象例子:
CTest*  pTest = new  CTest();
delete pTest;
pTest用來接收對象指針。
不用new,直接使用類定義申明:
CTest  mTest;
此種創建方式,使用完後不需要手動釋放,該類析構函數會自動執行。而new申請的對象,則只有調用到delete時再會執行析構函數,如果程序退出而沒有執行delete則會造成內存泄漏。
CTest*  pTest = NULL;
但使用普通方式創建的類對象,在創建之初就已經分配了內存空間。而類指針,如果未經過對象初始化,則不需要delete釋放。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章