亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

malloc/free和new/delete的區別

系統 2145 0
malloc/free和new/delete的區別

malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用于申請動態內存和釋放內存。

對于非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。

因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。

我們先看一看malloc/free和new/delete如何實現對象的動態內存管理,見下面示例。

?

  1. class ?Obj??
  2. {??
  3. public ?:??
  4. ????Obj( void ){?cout?<<?“Initialization”?<<?endl;?}??
  5. ????~Obj( void ){?cout?<<?“Destroy”?<<?endl;?}??
  6. ???? void ?Initialize( void ){?cout?<<?“Initialization”?<<?endl;?}??
  7. ???? void ?Destroy( void ){?cout?<<?“Destroy”?<<?endl;?}??
  8. };??
  9. void ?UseMallocFree( void )??
  10. {??
  11. ????Obj??*a?=?(obj?*)malloc( sizeof (obj));??? //?申請動態內存 ??
  12. ????a->Initialize();???????????????????????? //?初始化 ??
  13. ???? //… ??
  14. ????a->Destroy();??? //?清除工作 ??
  15. ????free(a);???????? //?釋放內存 ??
  16. }??
  17. void ?UseNewDelete( void )??
  18. {??
  19. ????Obj??*a?=? new ?Obj;?? //?申請動態內存并且初始化 ??
  20. ???? //… ??
  21. ???? delete ?a;??????????? //?清除并且釋放內存 ??
  22. }??
?

?

類Obj的函數Initialize模擬了構造函數的功能,函數Destroy模擬了析構函數的功能。函數UseMallocFree中,由于malloc/free不能執行構造函數與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。函數UseNewDelete則簡單得多。

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

既然new/delete的功能完全覆蓋了malloc/free,為什么C++不把malloc/free淘汰出局呢?這是因為C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。
如果用free釋放“new創建的動態對象”,那么該對象因無法執行析構函數而可能導致程序出錯。如果用delete釋放“malloc申請的動態內存”,理論上講程序不會出錯,但是該程序的可讀性很差。所以new/delete必須配對使用,malloc/free也一樣。





malloc/free和new/delete的區別


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区乱码 | 欧美日韩一本 | 狠狠做狠狠做综合日日 | 亚洲激情综合 | 日韩精品一区二区在线观看 | 免费黄色在线 | 91福利视频合集 | 国产羞羞视频在线播放 | 波多野结衣中文一区二区免费 | 国产精品成人不卡在线观看 | 久久精品一区二区三区中文字幕 | 国产精品男人的天堂 | 中文字幕免费观看视频 | 一级黄网| 久久中精品中文 | 久久精品国产一区二区三区不卡 | 国产午夜精品久久理论片 | 婷婷四房色播 | 我想看一级黄色毛片 | 久久这里一区二区精品 | 高清国产一区 | 日本精品免费 | 免费观看一级特黄欧美大片 | 91视频综合| 麻豆成人精品国产免费 | 久久国产精品久久久久久 | 国产精品日韩欧美 | 亚洲操片| 级毛片久久久毛片精品毛片 | 一本伊大人香蕉久久网手机 | 涩涩综合| 福利在线国产 | 亚洲在线观看一区 | 国产综合亚洲精品一区 | 精品在线观看一区 | 深夜视频在线 | 国产成人精品亚洲日本在线观看 | 亚洲精品视频一区二区 | 欧美黄色第一页 | 国产精品自在欧美一区 | 久久乐国产精品亚洲综合m3u8 |