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配置設定的是一塊記憶體。
new建立的對象你可以把它當成一個普通的對象,用成員函數通路,不要直接通路它的位址空間
malloc配置設定的是一塊記憶體區域,就用指針通路好了,而且還可以在裡面移動指針。
簡而言之:
new 是一個操作符,可以重載
malloc是一個函數,可以覆寫
new 初始化對象,調用對象的構造函數,對應的delete調用相應的析構函數
malloc僅僅配置設定記憶體,free僅僅回收記憶體
delete是釋放new開辟的記憶體。new和delete 開辟再堆中記憶體時候會調用構造函數和析構函數
malloc和free不會調用。free釋放記憶體,并不是真正意義上的把那塊記憶體清空了,他隻是告訴作業系統這塊記憶體可以被再次使用,如果作業系統以後用這塊記憶體的話就會把上面的資料覆寫掉。malloc多大記憶體就要用free多大記憶體。
那感覺其實一般用法就用new好了,用malloc 寫法還複雜,出了要讀懂程式需要了解,寫的時候應該不會用它了!