diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-06-23 17:11:35 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2023-06-25 15:28:23 +0000 |
commit | 3f2183ce2c41c5a998fcc1f83ca5ad4adc82b795 (patch) | |
tree | 68d4c39bf3dab05ffc221aeb9c16030d9521dfe0 /src/qml/qml/qqmlpropertycache_p.h | |
parent | f8c9fd6bfa5e6de4ac5d0176ebbc0292dbd031a2 (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.h | 6 |
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 *); |