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

new和malloc的區別

運算 沒有 動態對象 權限 new 動態內存 我們 析構 ID

1. malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。
2.new可以認為是malloc加構造函數的執行。new出來的指針是直接帶類型信息的。而malloc返回的都是void指針。

有了malloc/free為什麽還要new/delete?

1. 它們都可用於申請動態內存和釋放內存?
2. malloc是庫函數只能作用於內部數據類型,對於非內部數據動態對象而言,就不能完成對象的初始化與銷毀,即執行構造函數與析構函數。
而new 與 delete此類運算符就能夠在編譯器的控制權限內完成,對象的初始化與銷毀任務,即執行構造函數與析構函數
?

為什麽C++不把malloc/free淘汰出局呢

這是因為C++程序經常要調用C函數;而C程序只能用malloc/free管理動態內存?

我們不要企圖用malloc/free來 完成動態對象的內存管理, 應該用new/delete?由於內部數據類型的“對象”沒有構造與析構的過程,對它們而言malloc/free和new/delete是等價的?

註意: 如果用free釋放“new創建的動態對象”,那麽該對象因無法執行析構函數而可能導致程序出錯?

如果用delete釋放“malloc申請的動態內存”,結果也會導致程序出錯,但是該程序的可讀性很差?所以new/delete必須配對使用,malloc/free也一樣?

malloc 與 new 對於內存泄漏問題

內存泄漏對於malloc或者new都可以檢查出來的,區別在於new可以指明是那個文件的那一行,而malloc沒有這些信息?

參考:

https://blog.csdn.net/qq_26816591/article/details/52214313




new和malloc的區別