久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

小結(jié)《malloc與new之區(qū)別》

 wlk8611 2013-02-03

 

1,malloc與free是C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),new/delete是C++的運(yùn)算符,。它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存

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

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

4,C++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc/free管理動(dòng)態(tài)內(nèi)存,。

5,、new可以認(rèn)為是malloc加構(gòu)造函數(shù)的執(zhí)行。new出來(lái)的指針是直接帶類型信息的,。而malloc返回的都是void指針,。

CPP代碼
復(fù)制代碼
class Obj

{

public :

Obj(
void){ cout << “Initialization” << endl; }

~Obj(void){ cout << “Destroy” << endl; }

void Initialize(void){ cout << “Initialization” << endl; }

void Destroy(void){ cout << “Destroy” << endl; }

};

void UseMallocFree(void)

{

Obj
*a = (obj *)malloc(sizeof(obj)); // 申請(qǐng)動(dòng)態(tài)內(nèi)存

a
->Initialize(); // 初始化

//

a
->Destroy(); // 清除工作

free(a);
// 釋放內(nèi)存

}

void UseNewDelete(void)

{

Obj
*a = new Obj; // 申請(qǐng)動(dòng)態(tài)內(nèi)存并且初始化

//

delete a;
// 清除并且釋放內(nèi)存

}
復(fù)制代碼

示例用malloc/free和new/delete如何實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)內(nèi)存管理

類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來(lái)完成初始化與清除工作,。函數(shù)UseNewDelete則簡(jiǎn)單得多,。

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

既然new/delete的功能完全覆蓋了malloc/free,,為什么C++不把malloc/free淘汰出局呢,?這是因?yàn)镃++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc/free管理動(dòng)態(tài)內(nèi)存,。

如果用free釋放“new創(chuàng)建的動(dòng)態(tài)對(duì)象”,,那么該對(duì)象因無(wú)法執(zhí)行析構(gòu)函數(shù)而可能導(dǎo)致程序出錯(cuò),。如果用delete釋放“malloc申請(qǐng)的動(dòng)態(tài)內(nèi)存”,理論上講程序不會(huì)出錯(cuò),,但是該程序的可讀性很差,。所以new/delete必須配對(duì)使用,malloc/free也一樣,。

二:new delete在實(shí)現(xiàn)上其實(shí)調(diào)用了malloc,free函數(shù),。

三:new operator除了分配內(nèi)存,還要調(diào)用構(gòu)造函數(shù),。

malloc函數(shù)只是負(fù)責(zé)分配內(nèi)存

摘自:http://binbin8497./blog/492297

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多