malloc/free 跟new/delete的區別

一,概念

     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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章