diff --git a/libraries/shared/src/DependencyManager.cpp b/libraries/shared/src/DependencyManager.cpp index b4b3061317..41cb405ac7 100644 --- a/libraries/shared/src/DependencyManager.cpp +++ b/libraries/shared/src/DependencyManager.cpp @@ -16,17 +16,10 @@ DependencyManager& DependencyManager::getInstance() { return instance; } -DependencyManager::DependencyManager() { - // Guard against request of ourself - // We could set the value to this, but since it doesn't make sense to access - // the DependencyManager instance from the outside let's set it to NULL - _instanceHash.insert(typeid(DependencyManager).name(), NULL); -} - DependencyManager::~DependencyManager() { foreach (Dependency* instance, _instanceHash) { if (instance) { - instance->deleteInstance(); + delete instance; } } _instanceHash.clear(); diff --git a/libraries/shared/src/DependencyManager.h b/libraries/shared/src/DependencyManager.h index 690058cab4..2a81941b8a 100644 --- a/libraries/shared/src/DependencyManager.h +++ b/libraries/shared/src/DependencyManager.h @@ -19,16 +19,24 @@ class DependencyManager { public: + // Only accessible method. + // usage: T* instance = DependencyManager::get(); template static T* get(); + // Any class T in the DependencyManager needs to subclass Dependency + // They also need to have protected constructor(s) and virtual destructor + // As well as declare DependencyManager a friend class class Dependency { - virtual void deleteInstance() = 0; + protected: + Dependency() {} + virtual ~Dependency() {} // Ensure the proper destruction of the object friend DependencyManager; }; + private: static DependencyManager& getInstance(); - DependencyManager(); + DependencyManager() {} ~DependencyManager(); typedef QHash InstanceHash; @@ -52,4 +60,4 @@ T* DependencyManager::get() { return newInstance; } -#endif // hifi_DependencyManager_h \ No newline at end of file +#endif // hifi_DependencyManager_h