天天看點

c++ /c malloc

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 寫法還複雜,出了要讀懂程式需要了解,寫的時候應該不會用它了!

c++

繼續閱讀