1. 程式人生 > >new/delete、malloc/free 的區別

new/delete、malloc/free 的區別

標準庫函數 class 字節數 定義 自動釋放 nbsp 知識 策略 用途

相同點 1、都可以動態的申請或釋放內存 2、存儲方式相同,動態申請的內存都存放在堆中,無法自動釋放,要調用對應的delete和free 區別 1、new能自行的計算需要分配的空間,malloc需要手動計算字節數
    int *p1 = new int[10];
    int *p2 = (int*)malloc(10*sizeof(int));
2、new和delete直接帶具體類型的指針,malloc和free返回void類型的指針
 void *p2 = malloc(10*sizeof(int));
3、new是類型 安全的,比如int *a = new float[10]這個語句會報錯, int *a = malloc(10*sizeof(float))就不會報錯 4、new步驟分為new操作和構造兩步,new操作對應於malloc,但new操作可以重載,可以自定義內存分配策略,不做內存分配,或者分配到非內存設備上,但malloc不行 5、new/delete會調用構造析構函數,malloc/free就不會 6、malloc/free是標準庫函數,需要包頭文件“stdlib.h”,new/delete是C++的操作符,不需要任何庫的支持 註意事項:
malloc/free、new/delete必須配對使用,否則造成內存泄漏 delete和free僅僅知識告訴系統,這一塊內存不用了,可以做其他用途,但是沒對他進行寫操作,內存中的變量的值沒有發生變化,可能出現野指針。所以要將指針置為NULL

new/delete、malloc/free 的區別