编写了一个闪烁对象FlashObj,有两个接口add和draw
class FlashObj
{
std::map<size_t, FlashItem*> m_items;
public:
size_t add(FlashItem* item){
LOCK;
size_t key = m_items.size();
m_items[key] = item;
return key;
}
void draw(){
LOCK;
auto iter = m_items.begin();
while (iter != m_items.end()){
if (iter->second->actived()){
iter->second->step();
iter->second->draw();
}
else{
delete iter->second;
iter = m_items.erase(iter);
}
}
}
};
在绘制的时候,绘制周期结束后自动删除元素。但是一运行发现存在内存泄漏,根源在于add时使用的key是当前元素的个数,但是这个key对应的元素有可能并没有被删除,这时候加入就会覆盖掉原有的FlashItem导致内存泄漏。
看起来delete和add似乎是对应上的,但是实际上有泄漏。