NEW
int *p=new int [10]
p指向了第一個int地址
方括號內的必須是整形,但不必是常量
還可以用一個數組類型的類型別名來分配一個數組
<wiz_code_mirror>
typedef int arr[10]; //arr表示10個int的數組類型
int *p = new arr; //分配一個10個int型的數組 p指向第一個int
編譯器執行:int *p=new int [10];
初始化動態分配對象的數組
int *p=new int [10](); //10個值初始化為0的int
int *p=new int [10]{1,2,3,4,5} //前5個已初始化,后5個默認為0
動態分配一個空數組是合法的
char *p = new char [0] //這樣是合法的,但是CP不能解引用
釋放動態數組
delete p;
delete [ ] p;
第二條語句銷毀p所指向的數組中的元素,並釋放對應的內存,數組中元素的銷毀時按逆序銷毀
即,最后一個元素首先被銷毀,然后是倒數第二個,以此類推
普通類型釋放的時候加與不加[ ]是一樣的,但是在類對象中是必須加[ ]
如果動態分配可10個類對象 在delete時候 不加[ ] 這里就只會調用一次析構函數,會泄露掉9個對象
加了[ ] 就會調用10次析構函數
malloc free和new delete差別
1.malloc和free是函數,new和delete是關鍵字(運算符)
2.malloc是按字節申請數據,而new是按照數據類型申請數據
3.malloc申請數據,不會調用構造函數,free也不會調用析構函數
new在申請對象的時候,會自動調用構造函數,delete釋放對象時候,會自動調用析構函數
總結: 所以,在C++中,申請對象空間時候,應該使用new和delete去開辟釋放堆空間