diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index d1a1896947..fdf8030199 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; @@ -35,24 +42,12 @@ public: private: static DependencyManager& getInstance(); DependencyManager() {} - ~DependencyManager(); - - static void noDelete(void*) {} + ~DependencyManager(); }; 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; }