记录一个qt项目中使用C++ foreach循环的bug及解决办法
问题描述
使用下面的代码会导致最后一个元素删不了
if(mSelectedWidgets.size()>0){
for(auto it:mSelectedWidgets){
mSelectedWidgets.removeOne(it);
mWidgets.removeOne(it);
it->hide();
it->deleteLater();
}
}
可以看到有一个元素遍历了两次,导致最后一个元素没有被遍历
解决方案:
将移除操作移动到循环外面即可避免
if(mSelectedWidgets.size()>0){
for(auto it:mSelectedWidgets){
mWidgets.removeOne(it);
it->hide();
it->deleteLater();
}
mSelectedWidgets.clear();
}