天天看點

動态記憶體申請函數 malloc_記憶體申請malloc/new與記憶體釋放free/delete的差別

動态記憶體申請函數 malloc_記憶體申請malloc/new與記憶體釋放free/delete的差別

前面的文章小編說過,存放在堆上的資料是由程式員小哥哥負責申請和回收的.今天我們就說一下動态申請記憶體的指令以及他們之間的差別.最普遍的申請記憶體方式就是malloc/free與new/delete;

為了保證記憶體及時回收,養成良好的習慣,malloc與free要成對出現,new與delete也要成對出現;

兩者的相同點就是:功能相同,都是記憶體申請的函數,可以在堆區域進行記憶體申請;

差別為:

  • malloc/free函數隻能應用于基本類型,而new/delete不但可以應用于基本類型,還可以應用于面向對象的自定義類型;
  • malloc傳回的是void*類型,程式員需要顯式的轉化為自己所需要的指針類型;new操作符後面直接指明了類型,不涉及到類型轉化;
  • malloc函數隻負責記憶體申請,并傳回首位址;new運算符除了申請空間,還會調用構造函數.初始化指針指向的内容;free函數隻負責釋放空間,并辨別這段空間為可用空間,delete運算符除了釋放空間,還會調用對象的析構函數;
  • 事實上,小編認為,new/delete的功能完全覆寫了malloc/free的功能,為什麼還保留這malloc/free呢?主要是考慮到相容性問題,友善c向c++遷移