Merge pull request #4117 from Atlante45/dm_update

Drop DM ref before creating new object
This commit is contained in:
Stephen Birarda 2015-01-15 14:15:01 -08:00
commit b2c5847d9b

View file

@ -83,11 +83,13 @@ template <typename T, typename ...Args>
QSharedPointer<T> DependencyManager::set(Args&&... args) { QSharedPointer<T> DependencyManager::set(Args&&... args) {
static size_t hashCode = _manager.getHashCode<T>(); static size_t hashCode = _manager.getHashCode<T>();
QSharedPointer<T> instance(new T(args...), &T::customDeleter); QSharedPointer<Dependency>& instance = _manager.safeGet(hashCode);
QSharedPointer<Dependency> storedInstance = qSharedPointerCast<Dependency>(instance); instance.clear(); // Clear instance before creation of new one to avoid edge cases
_manager.safeGet(hashCode).swap(storedInstance); QSharedPointer<T> newInstance(new T(args...), &T::customDeleter);
QSharedPointer<Dependency> storedInstance = qSharedPointerCast<Dependency>(newInstance);
instance.swap(storedInstance);
return instance; return newInstance;
} }
template <typename T> template <typename T>