1. 程式人生 > >C/C++ - malloc/free和new/delete的區分

C/C++ - malloc/free和new/delete的區分

字節 delete 分別是 自定義 void int eight 構造函數 內存

new/delete與malloc/free的區別主要表現在以下幾個方面:

  註意:最主要的區別,new/delete是運算符,而malloc/free是函數

  (1)、new能夠自動計算需要分配的內存空間,而malloc需要手工計算字節數。

      例如,int* p1=new int[2] , int* p2=malloc(2*sizeof(int))。

  (2)、new/delete返回直接帶具體類型的指針,malloc/free返回void類型的指針。

  (3)、new是類型安全的,而malloc不是。例如,int* p=new float[2],編譯時就會報錯;而int* p=malloc(2*sizeof(float)),編譯時編譯器就無法指出錯誤來。

  (4)、new一般由兩步構成,分別是new操作和構造。

      new操作對應於malloc,但new操作可以重載,可以自定義內存分配策略,不做內存分配,甚至分配到費內存設備上,而malloc不可以。

  (5)、new將調用構造函數,而malloc不能;delete將調用析構函數,而free不能。

  (6)、malloc/free需要庫文件stdlib.h支持,new/delete則不需要庫文件支持

  

C/C++ - malloc/free和new/delete的區分