Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.1 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/corelib/kernel/qvariant_p.h

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information ([email protected])
     4** All rights reserved.
     5** Contact: Nokia Corporation ([email protected])
    56**
    67** This file is part of the QtCore module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you
     37** @nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    5858
    5959#include <QtCore/qglobal.h>
     60
    6061
    6162QT_BEGIN_NAMESPACE
     
    9293#endif
    9394
     95
     96
     97
     98
     99
     100
     101
     102
     103
     104
     105
     106
    94107// constructs a new variant if copy is 0, otherwise copy-constructs
    95108template <class T>
     
    97110{
    98111    if (sizeof(T) > sizeof(QVariant::Private::Data)) {
    99         x->data.shared = copy ? new QVariant::PrivateShared(new T(*static_cast<const T *>(copy)))
    100                               : new QVariant::PrivateShared(new T);
     112        x->data.shared = copy ? new QVariant))
     113                              : new QVariant;
    101114        x->is_shared = true;
    102115    } else {
     
    108121}
    109122
     123
     124
     125
     126
     127
     128
     129
     130
     131
     132
     133
    110134// deletes the internal structures
    111135template <class T>
    112136inline void v_clear(QVariant::Private *d, T* = 0)
    113137{
     138
    114139    if (sizeof(T) > sizeof(QVariant::Private::Data)) {
    115         delete v_cast<T>(d);
    116         delete d->data.shared;
     140        //now we need to cast
     141        //because QVariant::PrivateShared doesn't have a virtual destructor
     142        delete static_cast<QVariantPrivateSharedEx<T>*>(d->data.shared);
    117143    } else {
    118144        v_cast<T>(d)->~T();
    119145    }
     146
    120147}
     148
     149
    121150
    122151QT_END_NAMESPACE
Note: See TracChangeset for help on using the changeset viewer.