一,概念
malloc:向系統申請分配指定size個字節的內存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C規定,void* 類型可以強制轉換爲任何其它類型的指針。
free():配合malloc成對出現,釋放內存空間。
new :當我們使用關鍵字new在堆上動態創建一個對象時,它實際上做了三件事:獲得一塊內存空間、調用構造函數、返回正確的指針。
delete:配合new,用來調用析構函數,釋放內存空間。
二,用法
int* p = (int *) malloc (sizeof(int));
free(p);
int *a=new int(); double *a=new double[100];
delete a;
三,區別
1,
Foo* foo = malloc(sizeof(Foo)) //單純的分配空間。不是想創建一個對象。
Foo* foo = new Foo();調用Foo的構造方法來初始化對象,既要分配空間又要初始化空間,讓它變成一個對象。
delete 會調用析構函數
free() 單純釋放空間,不刪除對象
2,malloc/free是庫函數,new/delete 爲操作符
四,注意:
1,malloc/free 跟new/delete要成對出現,否則就是不規範。
2,儘量用new和delete而不用malloc和free。