summaryrefslogtreecommitdiffstats
path: root/logic/QObjectPtr.h
diff options
context:
space:
mode:
Diffstat (limited to 'logic/QObjectPtr.h')
-rw-r--r--logic/QObjectPtr.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/logic/QObjectPtr.h b/logic/QObjectPtr.h
index 32e59bd9..b81b3234 100644
--- a/logic/QObjectPtr.h
+++ b/logic/QObjectPtr.h
@@ -1,26 +1,43 @@
#pragma once
#include <memory>
+#include <QObject>
+
+namespace details
+{
+struct DeleteQObjectLater
+{
+ void operator()(QObject *obj) const
+ {
+ obj->deleteLater();
+ }
+};
+}
+/**
+ * A unique pointer class with unique pointer semantics intended for derivates of QObject
+ * Calls deleteLater() instead of destroying the contained object immediately
+ */
+template<typename T> using unique_qobject_ptr = std::unique_ptr<T, details::DeleteQObjectLater>;
/**
- * A pointer class with the usual shared pointer semantics intended for derivates of QObject
+ * A shared pointer class with shared pointer semantics intended for derivates of QObject
* Calls deleteLater() instead of destroying the contained object immediately
*/
template <typename T>
-class QObjectPtr
+class shared_qobject_ptr
{
public:
- QObjectPtr(){}
- QObjectPtr(T * wrap)
+ shared_qobject_ptr(){}
+ shared_qobject_ptr(T * wrap)
{
reset(wrap);
}
- QObjectPtr(const QObjectPtr<T>& other)
+ shared_qobject_ptr(const shared_qobject_ptr<T>& other)
{
m_ptr = other.m_ptr;
}
template<typename Derived>
- QObjectPtr(const QObjectPtr<Derived> &other)
+ shared_qobject_ptr(const shared_qobject_ptr<Derived> &other)
{
m_ptr = other.unwrap();
}