[Marble-devel] Fwd: Re: Wrong usage of ?QList::ConstIterator & QList::begin() ?
Inge Wallin
inge at lysator.liu.se
Sat Oct 18 15:38:00 CEST 2008
This struck me as something we should check in Marble. Not only for bug
reasons but also performance.
-Inge
---------- Forwarded Message ----------
Subject: Re: Wrong usage of ?QList::ConstIterator & QList::begin() ?
Date: Saturday 18 October 2008
From: Andreas Pakulat <apaku at gmx.de>
To: kde-core-devel at kde.org
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 Marble-devel
mailing list