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使用的區別: