aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlpropertycache_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/qqmlpropertycache_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/qqmlpropertycache_p.h')
-rw-r--r--src/qml/qml/qqmlpropertycache_p.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlpropertycache_p.h b/src/qml/qml/qqmlpropertycache_p.h
index 0f44533ef7..b261d1caca 100644
--- a/src/qml/qml/qqmlpropertycache_p.h
+++ b/src/qml/qml/qqmlpropertycache_p.h
@@ -105,7 +105,7 @@ private:
Shared = 1
};
- struct SharedHolder : public QQmlRefCounted<SharedHolder>
+ struct SharedHolder final : public QQmlRefCounted<SharedHolder>
{
Q_DISABLE_COPY_MOVE(SharedHolder)
SharedHolder(QMetaObject *shared) : metaObject(shared) {}
@@ -116,7 +116,7 @@ private:
mutable QBasicAtomicInteger<quintptr> d = 0;
};
-class Q_QML_PRIVATE_EXPORT QQmlPropertyCache
+class Q_QML_PRIVATE_EXPORT QQmlPropertyCache final
: public QQmlRefCounted<QQmlPropertyCache>
{
public:
@@ -136,7 +136,7 @@ public:
const QMetaObject *, QTypeRevision metaObjectRevision = QTypeRevision::zero());
QQmlPropertyCache() = default;
- ~QQmlPropertyCache() override;
+ ~QQmlPropertyCache();
void update(const QMetaObject *);
void invalidate(const QMetaObject *);