欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

malloc/free和new/delete的區(qū)別

系統(tǒng) 1912 0
malloc/free和new/delete的區(qū)別

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

對于非內(nèi)部數(shù)據(jù)類型的對象而言,光用maloc/free無法滿足動態(tài)對象的要求。對象在創(chuàng)建的同時要自動執(zhí)行構(gòu)造函數(shù),對象在消亡之前要自動執(zhí)行析構(gòu)函數(shù)。由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務強加于malloc/free。

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

我們先看一看malloc/free和new/delete如何實現(xiàn)對象的動態(tài)內(nèi)存管理,見下面示例。

?

  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));??? //?申請動態(tài)內(nèi)存 ??
  12. ????a->Initialize();???????????????????????? //?初始化 ??
  13. ???? //… ??
  14. ????a->Destroy();??? //?清除工作 ??
  15. ????free(a);???????? //?釋放內(nèi)存 ??
  16. }??
  17. void ?UseNewDelete( void )??
  18. {??
  19. ????Obj??*a?=? new ?Obj;?? //?申請動態(tài)內(nèi)存并且初始化 ??
  20. ???? //… ??
  21. ???? delete ?a;??????????? //?清除并且釋放內(nèi)存 ??
  22. }??
?

?

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

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

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





malloc/free和new/delete的區(qū)別


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品视频免费播放 | 天天做天天爱夜夜爽女人爽宅 | 九月色婷婷 | 91短视频版官网 | 日韩一区二区福利 | 黄色网址你懂的 | 久久电影精品久久99久久 | 亚洲经典激情春色另类 | 日韩一区二区av | 美女久久一区 | 精品中文字幕一区二区 | 亚洲天堂视频在线观看免费 | 精品久久久影院 | 日本在线播放一区 | 亚洲精品美女久久777777 | 99久久一香蕉国产线看观看 | 亚洲精品午夜电影 | 国产成人精品日本亚洲麻豆 | 一呦二呦三呦国产精品 | 999精品免费视频 | 色综合五月色婷婷开心 | 久爱视频www在线播放 | 99成人| 成人午夜 | 黄色国产在线视频 | 一区二区三区视频免费观看 | 天堂色在线 | 国产高清久久久 | 国产三级在线精品男人的天堂 | 国产一级在线看 | 久草视频官网 | 麻豆精品一区二区 | 成人在线免费av | 污污视频免费网站 | 亚州a| 黑色丝袜美女被视频网站 | 强伦女教师视频 | 色窝视频| 欧美日韩国产中文字幕 | 中文字幕免费在线观看视频 | 国产男女在线观看 |