NEW和數組


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去開辟釋放堆空間
 
 
 
 
 
 


免責聲明!

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



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