diff options
Diffstat (limited to 'logic')
-rw-r--r-- | logic/QObjectPtr.h | 29 | ||||
-rw-r--r-- | logic/forge/ForgeVersionList.cpp | 4 | ||||
-rw-r--r-- | logic/net/NetAction.h | 2 | ||||
-rw-r--r-- | logic/net/NetJob.h | 2 |
4 files changed, 27 insertions, 10 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(); } diff --git a/logic/forge/ForgeVersionList.cpp b/logic/forge/ForgeVersionList.cpp index 7f2176fd..a05ced99 100644 --- a/logic/forge/ForgeVersionList.cpp +++ b/logic/forge/ForgeVersionList.cpp @@ -424,7 +424,7 @@ void ForgeListLoadTask::listDownloaded() void ForgeListLoadTask::listFailed() { - auto reply = listDownload->m_reply; + auto &reply = listDownload->m_reply; if (reply) { qCritical() << "Getting forge version list failed: " << reply->errorString(); @@ -437,7 +437,7 @@ void ForgeListLoadTask::listFailed() void ForgeListLoadTask::gradleListFailed() { - auto reply = gradleListDownload->m_reply; + auto &reply = gradleListDownload->m_reply; if (reply) { qCritical() << "Getting forge version list failed: " << reply->errorString(); diff --git a/logic/net/NetAction.h b/logic/net/NetAction.h index faf4dbe0..1d7eb94b 100644 --- a/logic/net/NetAction.h +++ b/logic/net/NetAction.h @@ -61,7 +61,7 @@ public: public: /// the network reply - QObjectPtr<QNetworkReply> m_reply; + unique_qobject_ptr<QNetworkReply> m_reply; /// the content of the content-type header QString m_content_type; diff --git a/logic/net/NetJob.h b/logic/net/NetJob.h index 85a8bf83..45f6dacf 100644 --- a/logic/net/NetJob.h +++ b/logic/net/NetJob.h @@ -27,7 +27,7 @@ #include "multimc_logic_export.h" class NetJob; -typedef QObjectPtr<NetJob> NetJobPtr; +typedef shared_qobject_ptr<NetJob> NetJobPtr; class MULTIMC_LOGIC_EXPORT NetJob : public Task { |