From 3f2b5aeca408f5fef82be452dd13c1182eed840e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 16 Dec 2014 16:22:59 -0800 Subject: [PATCH 1/2] Cleaner destruction handling --- libraries/shared/src/DependencyManager.h | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index d1a1896947..06a01058fd 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -20,7 +20,14 @@ public:\ typedef QSharedPointer SharedPointer;\ private:\ - void customDeleter() { delete this; }\ + void customDeleter() {\ + QObject* thisObject = dynamic_cast(this);\ + if (thisObject) {\ + thisObject->deleteLater();\ + } else {\ + delete this;\ + }\ + }\ friend class DependencyManager; class QObject; @@ -42,17 +49,7 @@ private: template QSharedPointer DependencyManager::get() { - static QSharedPointer sharedPointer; - static T* instance = new T(); - - if (instance) { - if (dynamic_cast(instance) != NULL) { // If this is a QOject, call deleteLater for destruction - sharedPointer = QSharedPointer(instance, &T::deleteLater); - } else { // Otherwise use custom deleter to avoid issues between private destructor and QSharedPointer - sharedPointer = QSharedPointer(instance, &T::customDeleter); - } - instance = NULL; - } + static QSharedPointer sharedPointer = QSharedPointer(new T(), &T::customDeleter); return sharedPointer; } From 6304a5e819e1cb06423f85b62e3ea3fa56d83f86 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 16 Dec 2014 16:50:15 -0800 Subject: [PATCH 2/2] Unused removed method --- libraries/shared/src/DependencyManager.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index 06a01058fd..fdf8030199 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -42,9 +42,7 @@ public: private: static DependencyManager& getInstance(); DependencyManager() {} - ~DependencyManager(); - - static void noDelete(void*) {} + ~DependencyManager(); }; template