[Development] HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

Smith Martin Martin.Smith at theqtcompany.com
Fri Jul 10 13:21:17 CEST 2015


Yes, thanks for your blog, but I'm one of those responsible for Qt documentation. Currently, the Qt documentation for QList shows this:

"For most purposes, QList is the right class to use. Its index-based API is more convenient than QLinkedList's iterator-based API, and it is usually faster than QVector because of the way it stores its items in memory. It also expands to less code in your executable."

Reading that, most users will use QList all the time.

But I'm still not clear on one point. If I use QList<C>, and it is implemented as QList<C*> because my C is not a "good" C, why is this inefficent if the only copy of each C is the one that gets allocated on the heap? I just create the list to store things. It won't ever be moved. I will just process the list when it's time comes.

Why is that inefficient?

martin

________________________________________
From: development-bounces+martin.smith=theqtcompany.com at qt-project.org <development-bounces+martin.smith=theqtcompany.com at qt-project.org> on behalf of Marc Mutz <marc.mutz at kdab.com>
Sent: Friday, July 10, 2015 2:17 PM
To: development at qt-project.org
Subject: Re: [Development] HEADS UP: Don't use QList, use Q_DECLARE_TYPEINFO

On Friday 10 July 2015 12:20:55 Smith Martin wrote:
> I'm asking if QList<C> becomes QList<C*> even if I declare it as QList<C>.

And I said in the initial mail:

On Friday 10 July 2015 11:03:49 Marc Mutz wrote:
>  I won't give you the whole story (google "QList harmful" for that)

Which you clearly haven't done. Otherwise you'd have found the first hit
https://marcmutz.wordpress.com/2010/07/29/sneak-preview-qlist-considered-
harmful/ whose second sentence reads:

  The problem boils down to the fact that for a lot of types T, QList<T> is
  needlessly inefficient by allocating elements on the heap and storing
  pointers to them instead of storing the elements in-place, like e.g. QVector
  does.

But yes, Peppe already provided the TL;DR: *grmbl*

He's the nicer of the two of us :)

--
Marc Mutz <marc.mutz at kdab.com> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
Tel: +49-30-521325470
KDAB - The Qt Experts
_______________________________________________
Development mailing list
Development at qt-project.org
http://lists.qt-project.org/mailman/listinfo/development



More information about the Development mailing list