[Development] Move ctors for q_declare_shared types

Marc Mutz marc.mutz at kdab.com
Fri Jun 26 22:20:11 CEST 2015


On Friday 26 June 2015 19:59:37 Thiago Macieira wrote:
> On Friday 26 June 2015 16:45:18 Marc Mutz wrote:
> > or that they don't have range-ctor or range-insert, or emplace, or
> > allocator  support.
> 
[...]
> I tried to implement emplace, but didn't find much value because Qt
> containers require the type contained to be default constructible and will
> make copies in the future anyway.

QList does not require the type to be default-constructible. I think only 
QVector and QVarLengthArray do.

> As for allocators, I've been doing C++ for 20 years and I have never once
> ever used one. So that's a P6 "less than not important" task in my view.

I did:
  https://github.com/GPGTools/pinentry/blob/master/secmem/secmem%2B%2B.h

Used here:
  https://github.com/GPGTools/pinentry/blob/master/qt4/secstring.h

And with C++11/14 stateful allocators, I expect allocators to gain popularity: 
e.g. QVarLengthArray can be superseded by something like

    char pool[4096];
    pool_allocator<T> alloc(pool);
    std::vector<T, pool_allocator<T>> vec(alloc);
    // ...

which would allow local-memory maps, too:
    std::map<K, V, std::less<>, pool_allocator<std::pair<const K, V>>>
      map(alloc);

Yes, that's what template aliases were invented for :)

Last time I looked (long ago, 2.4-ish), QtC had a per-document memory pool, 
too. Don't remember how they handled container classes, though.

Thanks,
Marc

-- 
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



More information about the Development mailing list