Wrong usage of ?QList::ConstIterator & QList::begin() ?

Andreas Pakulat apaku at gmx.de
Sat Oct 18 12:18:22 BST 2008


On 18.10.08 12:40:34, Albert Astals Cid wrote:
> A Dissabte 18 Octubre 2008, Christian Ehrlicher va escriure:
> > Hi,
> >
> > While trying to fix some bugs in KFile* on windows I saw some places
> > like this:
> >
> > for ( QStringList::ConstIterator it = m_dirList.begin();
> >        it != m_dirList.end() && !terminationRequested();
> >        ++it )
> >
> > Imo the programmer here expects that m_dirList.detach() isn't called but
> > this is wrong.
> >
> > m_dirList.begin() does a detach, returns a non-const iterator and then
> > the iterator is converted to a const iterator (see qlist.h:214 & 238).
> >
> > Therefore I suggest to add QT_STRICT_ITERATORS to the kdelibs flags. Or
> > does this maybe break BC?
> 
> This is not wrong, just not what the developer "really wanted" but it works 
> just fine, albeit a bit slower.

Actually it is wrong, or rather it can go wrong. Particularly the it !=
m_dirList.end() might evaluate to true on the first test, so the loop
wouldn't be executed at all. Its not so long ago when I fixed a bug
somewhere (not sure it was in KDE) that suffered exactly from that kind of
thing. If you want a const iterator use constBegin+constEnd.

Andreas
 
-- 
You will outgrow your usefulness.




More information about the kde-core-devel mailing list