第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在C ++中使用指向動態(tài)分配對象的指針向量時,如何避免內(nèi)存泄漏?

在C ++中使用指向動態(tài)分配對象的指針向量時,如何避免內(nèi)存泄漏?

C++
收到一只叮咚 2019-09-19 09:11:20
我正在使用一個指向?qū)ο蟮南蛄俊_@些對象派生自基類,并且正在動態(tài)分配和存儲。例如,我有類似的東西:vector<Enemy*> Enemies;我將從Enemy類派生,然后為派生類動態(tài)分配內(nèi)存,如下所示:enemies.push_back(new Monster());為了避免內(nèi)存泄漏和其他問題,我需要注意哪些事項?
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個贊

我假設(shè)如下:

  1. 你有一個像vector <base *>這樣的矢量

  2. 在堆上分配對象后,您正在將指針推送到此向量

  3. 你想在這個向量中執(zhí)行派生*指針的push_back。

以下事情浮現(xiàn)在我的腦海中:

  1. Vector不會釋放指針指向的對象的內(nèi)存。你必須自己刪除它。

  2. 沒有什么特定于vector,但基類析構(gòu)函數(shù)應(yīng)該是虛擬的。

  3. vector <base *>和vector <derived *>是兩種完全不同的類型。


查看完整回答
反對 回復(fù) 2019-09-19
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊

使用的麻煩vector<T*>在于,每當(dāng)向量意外地超出范圍時(比如拋出異常),向量會自行清理,但這只會釋放它為保存指針而管理的內(nèi)存,而不是你分配的內(nèi)存指針指的是什么。因此,GMan的delete_pointed_to功能價值有限,因?yàn)樗辉跊]有出錯的情況下才有效。

你需要做的是使用智能指針:

vector< std::tr1::shared_ptr<Enemy> > Enemies;

(如果您的std lib沒有TR1,請boost::shared_ptr改為使用。)除了非常罕見的極端情況(循環(huán)引用)之外,這簡單地消除了對象生存期的麻煩。

編輯:請注意,GMan在他的詳細(xì)答案中也提到了這一點(diǎn)。


查看完整回答
反對 回復(fù) 2019-09-19
  • 3 回答
  • 0 關(guān)注
  • 657 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號