2012-09-25 70 views
1

我有一个指向对象的指针列表。内存泄漏到指向对象的指针列表

std::list<X*> xList; 

所有我需要的是列表的大小,所以我的方法,填充此列表并调用size(),然后返回大小。

注意:我知道这不是最好的解决方案,但我使用的是一个提供动态分配对象列表的API,这是我能做到的唯一方法。

现在valgrind说这里有内存泄漏。我假设这是因为我从不删除列表中的对象。

我想我会做到这一点:

std::list<X*>::iterator iter; 
for (iter = xList.begin(); iter != xList.end(); ++iter) 
{ 
    delete (*iter); 
} 

但这是对此最好的解决方案?

+0

使用智能指针会是更好的解决方案。 – hmjd

+0

我认为你不能以这种方式删除元素(而迭代使用该迭代器)。 – dbrank0

+0

@ dbrank0:删除迭代器引用的对象非常好。 –

回答

6

不,最好的解决办法是改为使用std::list<std::unique_ptr<X>>。现在这些对象会在适当的时候自行删除,而且你不必关心它。当std::list被销毁时,它所拥有的X对象也被销毁。

2

但是这是最好的解决方案吗?

不,最好的解决办法是改为std::list<std::shared_ptr<X> >

+0

谢谢你的快速回复。你能否详细说明一下? – Kam

+0

@Kam你知道智能指针是什么吗? '的std :: shared_ptr'?看看它。它为动态分配的对象提供自动内存管理。 –

+1

对不起,我明白了,我想知道为什么你选择了专门用于这个问题的shared_ptr。谢谢。 – Kam