【发布时间】:2015-01-23 09:47:57
【问题描述】:
删除列表内容的正确方法是什么。目前我正在这样做。
std::list<CSchSuggestBar*>::const_iterator iter = m_pRescheduleReasons.begin();
for (; iter != m_pRescheduleReasons.end(); ++iter)
{
delete *iter;
}
但是删除 *iter 似乎会导致崩溃。
如果我只是打电话给m_pRescheduleReasons.clear()是首选
编辑:
指针如何存储在列表中的方式如下:(我做了一个单独的项目来隔离问题:当第一次出现崩溃时调用删除..但是有一个有效的对象,其中指针也指向了?所以我不太清楚它为什么会崩溃?
std::vector<Foo*> f;
for(int i = 0; i < 10; i++)
{
f.push_back(f1);
}
std::vector<Foo*>::const_iterator it = f.begin();
for (; it != f.end(); ++it)
{
delete *it;
}
编辑:我代表我解决了这是一个愚蠢的错误
【问题讨论】:
-
列表中的指针实际指向什么?如何将项目添加到列表中? 什么你添加到列表中?
-
我从谷歌搜索“在 C++ 中删除列表”中发现了很多好的建议
-
还要注意
clear函数只会使列表为空,它不会删除列表中的指针,因此如果您确实分配了这些指针,那么您将有内存泄漏。但是,您应该在删除列表中的所有指针后清除列表。 -
您是否有充分的理由不使用
std::list<CSchSuggestBar>?如果是这样,可能值得在问题中提及。 -
我认为您的问题与
std::list无关(查看my answer 中的简单工作示例),因此切换到std::vector时会遇到同样的问题。这就是我投反对票的原因,我希望你能解决这个问题。