new和malloc的區別

2022-02-27 13:04:27 字數 828 閱讀 7594

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

new可以認為是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。而malloc返回的都是void指標。
它們都可用於申請動態記憶體和釋放記憶體。

malloc是庫函式只能作用於內部資料型別,對於非內部資料動態物件而言,就不能完成物件的初始化與銷毀,即執行建構函式與析構函式。

而new 與 delete此類運算子就能夠在編譯器的控制許可權內完成,物件的初始化與銷毀任務,即執行建構函式與析構函式

這是因為c++程式經常要呼叫c函式;

而c程式只能用malloc/free管理動態記憶體。

我們不要企圖用malloc/free來完成動態物件的記憶體管理, 應該用new/delete。由於內部資料型別的「物件」沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的。

注意:如果用free釋放「new建立的動態物件」,那麼該物件因無法執行析構函式而可能導致程式出錯。

如果用delete釋放「malloc申請的動態記憶體」,結果也會導致程式出錯,但是該程式的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。

記憶體洩漏對於malloc或者new都可以檢查出來的,區別在於new可以指明是那個檔案的那一行,而malloc沒有這些資訊。

參考:

new和malloc的區別

1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於malloc或者new都可以檢查出來的,...

malloc和new的區別

1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...

new 和 malloc 的區別

new 和 malloc 的區別 1.malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2.對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動...