[Development] Q_MOVABLE_TYPE of Q${Container}

Milian Wolff mail at milianw.de
Fri Aug 2 13:59:37 CEST 2013


On Friday 02 August 2013 13:56:33 Milian Wolff wrote:
> On Friday 02 August 2013 13:47:58 Milian Wolff wrote:
> > Hey!
> > 
> > Are there any reasons why none of the container classes are declared as
> > movable in Qt5? Would a patch adding that be accepted, or does it break
> > the
> > ABI or anything?
> > 
> > Especially interesting to me is that none of the containers such as
> > QString, QVector, QList, QMap, QHash, QByteArray, QSet etc. pp. is
> > declared movable.
> > 
> > But QStringList is :]
> 
> Note: My grepping skills failed me, and Peppe just showed me
> http://code.woboq.org/qt5/qtbase/src/corelib/global/qtypeinfo.h.html#133
> 
> But what about QString/QByteArray? Do I also miss that somewhere?

Ok, heh. Now Steve piped in and told me that Q_DECLARE_SHARED that :)

So I'm happy. Sorry for the noise, maybe someone else learned something new 
here as well, other than me :)

> > To my knowledge, none of the containers above are implemented in a way
> > that
> > prevents safe move operations.
> > 
> > I know that these are implicitly shared, so the copying is not that slow,
> > but still - saving the atomic operations on the refcounter is certainly
> > worth it.
> > 
> > I've added the movable declarations to many structs in KDevelop codebase,
> > which also contain containers and so far did not find any bugs or issues
> > with it. Only tested on x86 though. I.e. I've successfully done stuff
> > like:
> > 
> > struct Foo {
> > 
> >  QContainer<Asdf> blub;
> > 
> > }
> > Q_DECLARE_TYPEINFO(Foo, Q_MOVABLE_TYPE);
> > QVector<Foo> foos;
-- 
Milian Wolff
mail at milianw.de
http://milianw.de



More information about the Development mailing list