1. 程式人生 > >new運算子與malloc函式

new運算子與malloc函式

new和malloc都是在對上開闢記憶體,但儘量使用new。

使用malloc的注意事項:(1)程式猿必須實現確定物件的長度;(2)malloc返回一個void*指標,賦值給其他型別時,必須進行強轉;(3)malloc可能申請記憶體失敗,所以必須判斷返回值來確保記憶體分配成功;(4)不會呼叫建構函式,但使用物件之前必須對它初始化;(5)和free配合使用。

C++解決動態記憶體分配的方案是把物件所需要的操作都結合在一個稱為new的運算子裡,當new建立一個物件時,直接返回該型別的指標,它在堆裡為物件分配記憶體並呼叫建構函式完成初始化,和delete配合使用。

 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出來的指標,會出現釋放問題,不會呼叫解構函式

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;