new和malloc都是在對上開闢內存,但儘可能使用new。spa
使用malloc的注意事項:(1)程序猿必須實現肯定對象的長度;(2)malloc返回一個void*指針,賦值給其餘類型時,必須進行強轉;(3)malloc可能申請內存失敗,因此必須判斷返回值來確保內存分配成功;(4)不會調用構造函數,但使用對象以前必須對它初始化;(5)和free配合使用。指針
C++解決動態內存分配的方案是把對象所須要的操做都結合在一個稱爲new的運算符裏,當new建立一個對象時,直接返回該類型的指針,它在堆裏爲對象分配內存並調用構造函數完成初始化,和delete配合使用。code
1 Person *p = new Person; 2 3 //至關於4-8行代碼 4 Person *p = (Person*)malloc(sizeof(Person)* 100); 5 if (NULL == p){ 6 return; 7 } 8 (*p).str = "abc"; 9 10 delete p; 11 if (p != NULL){ 12 free(p); 13 p = NULL; 14 }
注意事項:void*接收new出來的指針,會出現釋放問題,不會調用析構函數htm
new堆區開闢數組,必定會調用默認構造函數,因此必定要提供默認構造;棧區開闢數組,能夠指定有參構造對象
1 Person *p = new Person("abc"); //表示調用有參構造初始化 2 delete p; 3 4 Person *p1 = new Person[10]; //堆上開闢數組,調用默認構造函數,必須提供默認構造(程序猿不能只提供有參構造,會覆蓋) 5 delete[] p1; 6 7 Person p2[10] = { Person("123"), Person("456") };//棧上開闢內存,能夠指定有參構造 8 delete[] p2;