最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++基礎(chǔ)語(yǔ)法梳理:內(nèi)存分配和管理

2021-09-13 18:21 作者:C語(yǔ)言編程__Plus  | 我要投稿

本期是C++基礎(chǔ)語(yǔ)法分享的第八節(jié),今天給大家來(lái)分享一下:

(1)內(nèi)存分配和管理;

(2)malloc、free;

(3)new、delete;

(4)定位 new;

(5)delete this 合法嗎?

(6)如何定義一個(gè)只能在堆上(棧上)生成對(duì)象的類?


內(nèi)存分配和管理

malloc、calloc、realloc、alloca

malloc:申請(qǐng)指定字節(jié)數(shù)的內(nèi)存。申請(qǐng)到的內(nèi)存中的初始值不確定。

calloc:為指定長(zhǎng)度的對(duì)象,分配能容納其指定個(gè)數(shù)的內(nèi)存。申請(qǐng)到的內(nèi)存的每一位(bit)都初始化為 0。

realloc:更改以前分配的內(nèi)存長(zhǎng)度(增加或減少)。當(dāng)增加長(zhǎng)度時(shí),可能需將以前分配區(qū)的內(nèi)容移到另一個(gè)足夠大的區(qū)域,而新增區(qū)域內(nèi)的初始值則不確定。

alloca:在棧上申請(qǐng)內(nèi)存。程序在出棧的時(shí)候,會(huì)自動(dòng)釋放內(nèi)存。但是需要注意的是,alloca 不具可移植性, 而且在沒有傳統(tǒng)堆棧的機(jī)器上很難實(shí)現(xiàn)。alloca 不宜使用在必須廣泛移植的程序中。C99 中支持變長(zhǎng)數(shù)組 (VLA),可以用來(lái)替代 alloca。

malloc、free

用于分配、釋放內(nèi)存

malloc、free 使用

申請(qǐng)內(nèi)存,確認(rèn)是否申請(qǐng)成功

釋放內(nèi)存后指針置空

new、delete

new / new[]:完成兩件事,先底層調(diào)用 malloc 分配了內(nèi)存,然后調(diào)用構(gòu)造函數(shù)(創(chuàng)建對(duì)象)。

delete/delete[]:也完成兩件事,先調(diào)用析構(gòu)函數(shù)(清理資源),然后底層調(diào)用 free 釋放空間。

new 在申請(qǐng)內(nèi)存時(shí)會(huì)自動(dòng)計(jì)算所需字節(jié)數(shù),而 malloc 則需我們自己輸入申請(qǐng)內(nèi)存空間的字節(jié)數(shù)。

new、delete 使用

申請(qǐng)內(nèi)存,確認(rèn)是否申請(qǐng)成功

定位 new

定位 new(placement new)允許我們向 new 傳遞額外的地址參數(shù),從而在預(yù)先指定的內(nèi)存區(qū)域創(chuàng)建對(duì)象。

(1)place_address?是個(gè)指針

(2)initializers?提供一個(gè)(可能為空的)以逗號(hào)分隔的初始值列表

delete this 合法嗎?

合法,但:

必須保證 this 對(duì)象是通過?new(不是?new[]、不是 placement new、不是棧上、不是全局、不是其他對(duì)象成員)分配的

必須保證調(diào)用?delete this?的成員函數(shù)是最后一個(gè)調(diào)用 this 的成員函數(shù)

必須保證成員函數(shù)的?delete this?后面沒有調(diào)用 this 了

必須保證?delete this?后沒有人使用了

如何定義一個(gè)只能在堆上(棧上)生成對(duì)象的類?

只能在堆上

方法:將析構(gòu)函數(shù)設(shè)置為私有

原因:C++ 是靜態(tài)綁定語(yǔ)言,編譯器管理?xiàng)I蠈?duì)象的生命周期,編譯器在為類對(duì)象分配??臻g時(shí),會(huì)先檢查類的析構(gòu)函數(shù)的訪問性。若析構(gòu)函數(shù)不可訪問,則不能在棧上創(chuàng)建對(duì)象。

只能在棧上

方法:將 new 和 delete 重載為私有

原因:在堆上生成對(duì)象,使用 new 關(guān)鍵詞操作,其過程分為兩階段:第一階段,使用 new 在堆上尋找可用內(nèi)存,分配給對(duì)象;第二階段,調(diào)用構(gòu)造函數(shù)生成對(duì)象。將 new 操作設(shè)置為私有,那么第一階段就無(wú)法完成,就不能夠在堆上生成對(duì)象。

今天的分享就到這里了,大家要好好學(xué)C++喲~

寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!



C++基礎(chǔ)語(yǔ)法梳理:內(nèi)存分配和管理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
高台县| 宁武县| 丰顺县| 兴海县| 成都市| 项城市| 桃园市| 将乐县| 滕州市| 兴化市| 宜宾市| 唐山市| 博兴县| 和林格尔县| 萨迦县| 博兴县| 朝阳县| 鄱阳县| 梅州市| 得荣县| 清水县| 大化| 大兴区| 客服| 黄平县| 天水市| 大埔区| 沙雅县| 九寨沟县| 建水县| 锦屏县| 韶关市| 象州县| 沂水县| 偏关县| 南丰县| 河津市| 威远县| 漠河县| 永寿县| 临清市|