On terça-feira, 8 de maio de 2012 16.57.47, Marc Mutz wrote:
> > Between a move constructor and QSharedDataPointer, I'd rather stay with
> > the
> > latter. It avoids the manual reference counting, which may include subtle
> > errors.
>
> The manual reference counting reduces to calling ref() in the copy ctor and
> deref() || delete in the dtor, thanks to the copy-swap idiom.

Don't forget the detaches in all the non-const functions.

> > An alternative is to use C++11 extern template declarations alongside an
> > export macro. It's a solution I had tried and worked in
> > QDBusUnixFileDescriptor, using GCC's equivalent C++98 extension.
>
> This doesn't sound like the code ends up inline, though. Do you have a
> change set so I can look at it?

Look at the history of src/dbus/qdbusunixfiledescriptor.h.

The move constructor remains inline.

The destructor doesn't end up inline because the
QSharedData<QDBusUnixFileDescriptorPrivate> class is extern template. The
interesting thing is that dead-code removal removes the call to the destructor
of the private type because it can't happen.

> BC is only one reason to have the move ctor inline. The other is speed.
> Moving should be blazingly fast, and jumping into a so/dll to perform it
> sounds like premature pessimisation :)

The regular copy constructor is fast enough. There's no need to make the code
worse to read for minimal gain.

--
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
     Intel Sweden AB - Registration Number: 556189-6027
     Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to