上一節我講了new和delete,有人問這不是和C語言的malloc/free為C的標準庫函數差不多么
void* malloc(size_t size)//參數代表字節個數
void free(void* pointer)//參數代表內存地址
new、delete則為C++的操作運算符,它調用的分別為賦值運算符重載operator new()和operator delete();
實際上我在上一節已經講了,一個是庫函數,一個是運算符,怎么可能相同呢。那我們這節就說一下他倆的區別。
1.在使用上,malloc/free如下:
void func(){//開辟一個空間int* p1=(int*)malloc(sizeof(int));if(p1==NULL){exit(1);}free(p1);//開辟多個空間int*p2=(int*)malloc(sizeof(int)*4);if(p2==NULL){exit(1);}free(p2);}
用malloc分別開辟了1個和4個整型大小的空間和并free釋放它們;
new/delete如下:
void func(){//開辟一個空間int* p1=new int(1);delete p1;//開辟多個空間int*p2=new int[4];delete []p2;}
由此可知:
(1)malloc開辟空間類型大小需手動計算