D pointers

Thiago Macieira thiago at kde.org
Tue Oct 4 01:48:00 BST 2005

George Staikos wrote:
>  struct oldPixmapType { QPixmap a, b; };
>  mutable union {
>    struct {
>      QPixmap *icon, *miniIcon;
>    } pm;
>    char unused[sizeof(oldPixmapType)];
>  } aIconPixmap; // KDE4: remove me
>  Here we were even able to reuse the space so we didn't need to add to
> the d-pointer.

That's really ingenious. I hadn't thought of that!

However, even though that guarantees the proper sizeof, it doesn't 
guarantee __alignof and, hence, the necessary padding. 

You can solve that by adding one element to the union which has the same 
alignment requirements that QPixmap has. The hard part is figuring out 
which one that is.

So in general I don't think it's not a good idea to replace complex types 
with POD. The conclusion I come to is: if you're going to place a 
variable outside the private class, at least use POD types.

  Thiago Macieira  -  thiago (AT) macieira.info - thiago (AT) kde.org
    PGP/GPG: 0x6EF45358; fingerprint:
    E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358

3. Ac seo woruld wearð geborod, swá se Scieppend cwæð "Gewurde Unix" and 
wundor fremede and him "Unix" genemned, þæt is se rihtendgesamnung.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20051003/a1e7de4a/attachment.sig>

More information about the kde-core-devel mailing list