diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2012-11-13 18:14:55 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-11-13 18:19:45 +0100 |
commit | f74f6cdc5cdf1a44c5fa9492e92fe59e106a8a7c (patch) | |
tree | fa41b319c7a67df554c9088aff70541dbbb5f888 | |
parent | 06c831cfa48e5090cec1db2ea9d088abcd880a6d (diff) |
Add sanity check to WeakPointer.
We assume that the shared pointer can never be freed before the data
holding the weak reference, so make that explicit in the code.
Change-Id: Ieced69d09d66c3dbc5d91f1ca905048b271c24df
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r-- | src/lib/tools/weakpointer.h | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/lib/tools/weakpointer.h b/src/lib/tools/weakpointer.h index f50f3d78f..4c851f655 100644 --- a/src/lib/tools/weakpointer.h +++ b/src/lib/tools/weakpointer.h @@ -40,9 +40,16 @@ public: WeakPointer() : QWeakPointer<T>() {} WeakPointer(const QSharedPointer<T> &sharedPointer) : QWeakPointer<T>(sharedPointer) {} - operator T*() const { return QWeakPointer<T>::data(); } - T *operator->() const { return QWeakPointer<T>::data(); } - T operator*() const { return *QWeakPointer<T>::data(); } + operator T*() const { return checkedData(); } + T *operator->() const { return checkedData(); } + T operator*() const { return *checkedData(); } + +private: + T *checkedData() const { + T * const d = QWeakPointer<T>::data(); + Q_ASSERT(d); // Calling code is not expecting this situation. + return d; + } }; } // namespace Internal |