1

我有一个指向对象的指针列表。

 std::list<X*> xList;

我需要的只是列表的大小,所以我的方法填充这个列表并在其上调用 size() 然后返回大小。

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

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

我想我会这样做:

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

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

4

2 回答 2

6

不,最好的解决方案是换一个std::list<std::unique_ptr<X>>。现在,对象会在适当的时候自行删除,您不必担心它。当std::list被销毁时,X它所拥有的对象也被销毁。

于 2012-09-25T14:14:05.520 回答
2

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

不,最好的解决方案是换一个std::list<std::shared_ptr<X> >

于 2012-09-25T14:13:06.957 回答