簡體   English   中英

又一個C ++向量內存泄漏問題

[英]Yet another C++ vector memory leak question

我正在嘗試制作一個算法,可以按正確的順序繪制我的等距游戲的實體。 我的實體存儲在指針向量中。

在繪圖函數中,我首先創建一個相同指針的新向量,然后從for循環開始,循環我想要繪制的實體數量。 在該循環內部還有另一個循環,它確定要繪制的實體,並且在繪制實體時,使用vector.erase()從矢量中刪除指針,因此同一實體不會被繪制兩次(這就是為什么我我正在創建包含實體指針的向量的副本。

無論如何,我的代碼本身工作,實體按照我想要的方式繪制,但我似乎有內存泄漏(我實際上可以看到Windows任務管理器中的內存爬升28 kb / s)。

即使我除了這個以外的所有內容,內存泄漏仍然存在:

vector<Entity*> list = ent_list; // ent_list is the list of entity pointers
list.clear();

所以我想我錯過了什么,但我不確定是什么。 我想,因為我沒有使用“新”,記憶會得到照顧,但顯然不是......希望有人可以幫助我!

/費奧多爾

vector :: clear的引用說:“如果向量的元素是指向對象的指針,則此函數不會調用相應的析構函數”。 你確定你不依賴於此嗎?

不,標准容器只會擦除它們創建的內存; std::list.clear(); 只會使迭代器本身無效並刪除它,而不是你分配的內存。

你必須在每個迭代器之后調用std::list.remove()std::list.erase() ,並手動刪除你自己分配的指針。

向量不會刪除指針后面的內存。 在調用clear()之前,您必須刪除每個Entity *,或者您可以使用“智能容器”作為boost :: ptr_vector

解決此問題的最簡單方法是使用boost::shared_ptr<Element>替換容器元素。 這可能會清理使用向量的代碼,並提供指向更好的內存管理標准實踐的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM