aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2012-11-13 18:14:55 +0100
committerJoerg Bornemann <joerg.bornemann@digia.com>2012-11-13 18:19:45 +0100
commitf74f6cdc5cdf1a44c5fa9492e92fe59e106a8a7c (patch)
treefa41b319c7a67df554c9088aff70541dbbb5f888
parent06c831cfa48e5090cec1db2ea9d088abcd880a6d (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.h13
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