new運算子與malloc函式(還需要修改)

2022-04-27 14:56:29 字數 1065 閱讀 5158

細說new與malloc的10點區別

c++ 自由儲存區是否等價於堆?

**new/delete和malloc/free的用法與區別

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

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

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

1 person *p = new

person;23

//相當於4-8行**

4 person *p = (person*)malloc(sizeof(person)* 100);5

if (null ==p)

8 (*p).str = "

abc";9

10delete

p;11

if (p !=null)

注意事項:void*接收new出來的指標,會出現釋放問題,不會呼叫析構函式

new堆區開闢陣列,一定會呼叫預設建構函式,所以一定要提供預設構造;棧區開闢陣列,可以指定有參構造

1 person *p = new person("

abc"); //

表示呼叫有參構造初始化

2deletep;3

4 person *p1 = new person[10]; //

堆上開闢陣列,呼叫預設建構函式,必須提供預設構造(程式猿不能只提供有參構造,會覆蓋)

5delete

p1;67 person p2[10] = ;//

棧上開闢記憶體,可以指定有參構造

8delete p2;

定位new運算子

通常,new 從堆中分配記憶體,但它還有另一種稱為 定位 placement new 運算子,它可以讓我們指定要使用的位置。可以通過這個特性來設定記憶體管 理規程,處理需要通過特定位址進行訪問的硬體或在特定位置建立物件。要使用定位 new 特性,需要包含標頭檔案 new。使用定位 new 運算子時,...

定位 new 運算子

定位 new 運算子 和普通的new 運算子在堆上隨機分配記憶體相比,定位 new 運算子可以在特定的位址位置 定位 new 運算子的具體使用例項 const int buf 512 const int n 5 char buffer buf void part9 newplace 定位new 的其...

定位new運算子

一般的new運算子負責在heap堆中找到乙個足以能夠滿足要求的記憶體塊。定位new運算子在標頭檔案中。定位new運算子直接使用傳遞給它的位址,它不負責判斷哪些記憶體單元已被使用,也不查詢未使用的記憶體塊。這將一些記憶體管理的負擔交給了程式設計師。下面用乙個簡單的程式來說明定位new的用法 inclu...