3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個贊
我假設(shè)如下:
你有一個像vector <base *>這樣的矢量
在堆上分配對象后,您正在將指針推送到此向量
你想在這個向量中執(zhí)行派生*指針的push_back。
以下事情浮現(xiàn)在我的腦海中:
Vector不會釋放指針指向的對象的內(nèi)存。你必須自己刪除它。
沒有什么特定于vector,但基類析構(gòu)函數(shù)應(yīng)該是虛擬的。
vector <base *>和vector <derived *>是兩種完全不同的類型。

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)。
- 3 回答
- 0 關(guān)注
- 657 瀏覽
添加回答
舉報