1. 程式人生 > >malloc和new的區別

malloc和new的區別

1,malloc與free是C++/C語言的標準庫函式,new/delete是C++的運算子。它們都可用於申請動態記憶體和釋放記憶體。


2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行解構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制權限之內,不能夠把執行建構函式和解構函式的任務強加於malloc/free。


3,因此C++語言需要一個能完成動態記憶體分配和初始化工作的運算子new,以一個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。


4,C++程式經常要呼叫C函式,而C程式只能用malloc/free管理動態記憶體

new 是個操作符,和什麼"+","-","="...有一樣的地位. 
malloc是個分配記憶體的函式,供你呼叫的.


new是保留字,不需要標頭檔案支援.
malloc需要標頭檔案庫函式支援.

new 建立的是一個物件,
malloc分配的是一塊記憶體.

free()到底釋放了什麼簡而言之:
new      是一個操作符,可以過載   
malloc 是一個函式,可以覆蓋   
new      初始化物件,呼叫物件的建構函式,對應的delete呼叫相應的解構函式   
malloc 僅僅分配記憶體,free僅僅回收記憶體

   這個問題比較簡單,其實我是想和第二大部分的題目相呼應而已!哈哈!free()釋放的是指標指向的記憶體!注意!釋放的是記憶體,不是指標!這點非常非常重要!指標是一個變數,只有程式結束時才被銷燬。釋放了記憶體空間後,原來指向這塊空間的指標還是存在!只不過現在指標指向的內容的垃圾,是未定義的,所以說是垃圾。因此,前面我已經說過了,釋放記憶體後把指標指向NULL,防止指標在後面不小心又被解引用了。非常重要啊這一點


new建立的物件你可以把它當成一個普通的物件,用成員函式訪問,不要直接訪問它的地址空間
malloc分配的是一塊記憶體區域,就用指標訪問好了,而且還可以在裡面移動指標.

在進行C/C++程式設計開發時,經常會遇到malloc/free 與 new/delete 這兩對操作,主要功能就是可以在程式執行過程中動態的申請、釋放記憶體,從而達到對記憶體的操作。但是這兩對操作是有區別的,不能交叉搭配使用:即不能free掉new來的記憶體,也不能delete掉malloc來的記憶體空間。雖然有時候可以delete掉malloc來的記憶體,或者free掉new來的記憶體,但是通常情況下會給程式帶來不可預知的錯誤,相信這不是程式設計人員所希望看到的。要養成一個良好的習慣就是嚴格的配對使用:只用free來釋放malloc的記憶體空間、只用delete來釋放new來的記憶體空間。

     這兩對操作的區別:

     1、malloc/free是C/C++中的方法(函式),new/delete是C++中的操作符。

     2、malloc申請的是heap區的記憶體空間,而new則是申請的free store區的記憶體空間。

     3、使用free之前要判斷,使其free的指標是!NULL的,使用delete則無須判斷。

     4、free掉的記憶體是該指標指向的一段記憶體空間,裡面應該是空的。而delete掉的記憶體是裡面確實存有

          資料或者物件的。