c++中有了malloc/free,爲什麼還需要new/delete?

一: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文件。而運算符是否正確,編譯器在編譯掃描分析時就可以判定。


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