1. 程式人生 > 其它 >C++中new的常見使用方法(僅關注使用)及與malloc的區別

C++中new的常見使用方法(僅關注使用)及與malloc的區別

C++中new的常見使用方法(僅關注使用)及與malloc的區別

 

C++中new返回值為記憶體塊的地址,所以使用方法一般為      type *p = new的語句

 

new語句:

1. new type(變數/常值) 分配這種型別的一個大小的記憶體空間,並以括號中的值來初始化這個變數; 判斷這種變數或常值的所屬型別,分配一個該型別的記憶體空間,並用括號內內容初始化該值,返回記憶體地址;例如:int *m_Age = new int(age);  這裡型別是int,所以m_Age型別是int*,age的型別也應該是int。最後應delete m_Age


2. new type[n] 分配這種型別的n個大小的記憶體空間,並用預設建構函式來初始化這些變數;


例如: char* p=new char[6]; strcpy(p,"Hello");  申請連續的記憶體空間(6個char大小)首地址返回給字串指標p。 char* p = new char 預設一個。。。delete [] p; 若不加[]則釋放首地址一個該型別單位的記憶體。


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列元素陣列的指標。

 4.指標 = new 類名

父類指標 = new 子類名; (父類指標指向子類物件,使用多型) 相當於 使用new建立了一個物件,並建立父類指標指向這個物件,最後應delete父類指標。

 

 

 

new與malloc使用的區別: