一:malloc/free是c/c++中的標準庫函數,new/delete是c++中的運算符。它們都用於申請動態內存和釋放內存。
二:對於非內部數據對象(eg:類對象),只用malloc/free無法滿足動態對象的要求。這是因爲對象在創建的同時需要自動執行構造函數,對象在消亡之前要自動執行析構函數,而由於malloc/free是庫函數而不是運算符,不在編譯器的控制權限內,也就不能自動執行構造函數和析構函數。因此,不能將執行構造函數和析構函數的任務強加給malloc/free。所以,在c++中需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理和釋放內存工作的運算符delete。
三:
1:new建立的是一個對象,malloc分配的是一塊內存區域,用指針來訪問,並且可以在區域裏面移動指針;
2:對於內部數據類型,由於其沒有構造函數和析構函數的要求,對於內部數據類型來講,malloc/free和new/delete的作用是等價的,都是用來申請動態內存和釋放內存。
四:什麼是內部數據類型和非內部數據類型?
1:內部數據類型是編譯器本身就認識的,不需要用戶自己定義。如:基本數據類型:int,char,double等都是內部數據類型;2:非內部數據類型不是編譯器本身就認識的,需要用戶自己定義才能讓編譯器識別。如:由class,struct,union等關鍵字修飾 的變量都是非內部數據類型。
五:爲什麼庫函數不在編譯器控制權限內,而運算符在?
庫函數是已經編譯的代碼,編譯器不會在編譯檢查,由鏈接器將庫同用戶寫的代碼合成exe文件。而運算符是否正確,編譯器在編譯掃描分析時就可以判定。