diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-12-07 19:02:39 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-01-25 23:55:27 +0100 |
commit | 71597472ddbe6957f47ae61b72c147846a80f16f (patch) | |
tree | 756ce46b97f0487e86c50736abe0f74dff0dc742 /src/qml/qml/ftw | |
parent | d6eaa70859fbec0f02d15bd8e8fd6ddc360ab371 (diff) |
Avoid ping-pong between plain pointers and QQmlRefPointer
We want to deal in QQmlRefPointer as much as possible. In particular,
assigning nullptr to a QQmlRefPointer triggers the creation of an empty
QQmlRefPointer and the assignment of that one. Provide a reset() method
to do this in a cleaner way.
In turn, make QQmlGuardedContextData::reset() private. It's really
dangerous and should not be called from outside. setContextData() is
safer but may do additional work. The only place from where reset() was
previously called in its public capacity is probably dead code, though.
Change-Id: Idb72e255dbfad6e5dd963dc76d719bb9edc10471
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/ftw')
-rw-r--r-- | src/qml/qml/ftw/qqmlrefcount_p.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/qml/qml/ftw/qqmlrefcount_p.h b/src/qml/qml/ftw/qqmlrefcount_p.h index 06314ef5c5..cb0374d8b6 100644 --- a/src/qml/qml/ftw/qqmlrefcount_p.h +++ b/src/qml/qml/ftw/qqmlrefcount_p.h @@ -105,6 +105,17 @@ public: friend bool operator==(const QQmlRefPointer &a, const QQmlRefPointer &b) { return a.o == b.o; } friend bool operator!=(const QQmlRefPointer &a, const QQmlRefPointer &b) { return !(a == b); } + void reset(T *t = nullptr) + { + if (t == o) + return; + if (o) + o->release(); + if (t) + t->addref(); + o = t; + } + private: T *o; }; |