new運算符與malloc函數(還須要修改)

細說new與malloc的10點區別html

C++ 自由存儲區是否等價於堆?數組

淺談new/delete和malloc/free的用法與區別函數

  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;
相關文章
相關標籤/搜索