aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmltype_p_p.h
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2023-06-23 17:11:35 +0200
committerMarc Mutz <marc.mutz@qt.io>2023-06-25 15:28:23 +0000
commit3f2183ce2c41c5a998fcc1f83ca5ad4adc82b795 (patch)
tree68d4c39bf3dab05ffc221aeb9c16030d9521dfe0 /src/qml/qml/qqmltype_p_p.h
parentf8c9fd6bfa5e6de4ac5d0176ebbc0292dbd031a2 (diff)
QQmlRefCount: de-virtualize dtor
Now that QQmlRefCounted ensures no-one uses ~QQmlRefCount() directly anymore, we can make it non-virtual, shrinking the sizeof(QQmlRefCount) from 8/16 to 4/4 bytes (32/64 bit platforms). This requires moving the release() function from QQmlRefCount down into QQmlRefCounted<T>, and static_cast'ing *this to T before calling delete. We need to be careful, of course, that no derived class relied on the implied virtualness of ~QQmlRefCount() making their dtors virtual, so require that all classes that use QQmlRefCounted are either final or have a virtual destructor. Update the toolsupport test and the TypeInformationVersion, as sizeof(QQmlRefCount) was one the items checked. Fixes: QTBUG-114817 Change-Id: I69afd36ec5b63313842c1438e0244503603ed96f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmltype_p_p.h')
-rw-r--r--src/qml/qml/qqmltype_p_p.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/qml/qml/qqmltype_p_p.h b/src/qml/qml/qqmltype_p_p.h
index ab73da7a6b..73567b5a22 100644
--- a/src/qml/qml/qqmltype_p_p.h
+++ b/src/qml/qml/qqmltype_p_p.h
@@ -26,7 +26,7 @@
QT_BEGIN_NAMESPACE
-class QQmlTypePrivate : public QQmlRefCounted<QQmlTypePrivate>
+class QQmlTypePrivate final : public QQmlRefCounted<QQmlTypePrivate>
{
Q_DISABLE_COPY_MOVE(QQmlTypePrivate)
public:
@@ -145,7 +145,8 @@ public:
void setName(const QString &uri, const QString &element);
private:
- ~QQmlTypePrivate() override;
+ ~QQmlTypePrivate();
+ friend class QQmlRefCounted<QQmlTypePrivate>;
struct EnumInfo {
QStringList path;