diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/tools/qshareddata.h | 26 | ||||
-rw-r--r-- | src/gui/image/qpixmap.cpp | 5 | ||||
-rw-r--r-- | src/gui/image/qpixmap.h | 2 |
3 files changed, 29 insertions, 4 deletions
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index 71f2e17799..ffd4d4cf0b 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -304,6 +304,32 @@ Q_INLINE_TEMPLATE size_t qHash(const QExplicitlySharedDataPointer<T> &ptr, size_ template<typename T> Q_DECLARE_TYPEINFO_BODY(QSharedDataPointer<T>, Q_MOVABLE_TYPE); template<typename T> Q_DECLARE_TYPEINFO_BODY(QExplicitlySharedDataPointer<T>, Q_MOVABLE_TYPE); +#define QT_DECLARE_QSDP_SPECIALIZATION_DTOR(Class) \ + template<> QSharedDataPointer<Class>::~QSharedDataPointer(); + +#define QT_DECLARE_QSDP_SPECIALIZATION_DTOR_WITH_EXPORT(Class, ExportMacro) \ + template<> ExportMacro QSharedDataPointer<Class>::~QSharedDataPointer(); + +#define QT_DEFINE_QSDP_SPECIALIZATION_DTOR(Class) \ + template<> QSharedDataPointer<Class>::~QSharedDataPointer() \ + { \ + if (d && !d->ref.deref()) \ + delete d; \ + } + +#define QT_DECLARE_QESDP_SPECIALIZATION_DTOR(Class) \ + template<> QExplicitlySharedDataPointer<Class>::~QExplicitlySharedDataPointer(); + +#define QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(Class, ExportMacro) \ + template<> ExportMacro QExplicitlySharedDataPointer<Class>::~QExplicitlySharedDataPointer(); + +#define QT_DEFINE_QESDP_SPECIALIZATION_DTOR(Class) \ + template<> QExplicitlySharedDataPointer<Class>::~QExplicitlySharedDataPointer() \ + { \ + if (d && !d->ref.deref()) \ + delete d; \ + } + QT_END_NAMESPACE #endif // QSHAREDDATA_H diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index c3ae853795..d8473001aa 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -229,9 +229,8 @@ QPixmap::QPixmap(const QPixmap &pixmap) \sa swap() operator=(QPixmap&&) */ -template<> -QExplicitlySharedDataPointer<QPlatformPixmap>::~QExplicitlySharedDataPointer() -{ if (d && !d->ref.deref()) delete d; } + +QT_DEFINE_QESDP_SPECIALIZATION_DTOR(QPlatformPixmap) /*! Constructs a pixmap from the given \a xpm data, which must be a diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h index e731597659..42d4e27102 100644 --- a/src/gui/image/qpixmap.h +++ b/src/gui/image/qpixmap.h @@ -57,7 +57,7 @@ class QImageReader; class QColor; class QVariant; class QPlatformPixmap; -template<> Q_GUI_EXPORT QExplicitlySharedDataPointer<QPlatformPixmap>::~QExplicitlySharedDataPointer(); +QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QPlatformPixmap, Q_GUI_EXPORT) class Q_GUI_EXPORT QPixmap : public QPaintDevice { |