mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-14 11:46:34 +02:00
Code review feedback
In DependencyManager::set<>() destroy the clear the previous before allocating the new instance.
This commit is contained in:
parent
442a679108
commit
fe17550a80
2 changed files with 18 additions and 8 deletions
|
@ -26,8 +26,3 @@ QSharedPointer<Dependency> DependencyManager::safeGet(size_t hashCode) const {
|
|||
return _instanceHash.value(hashCode);
|
||||
}
|
||||
|
||||
void DependencyManager::safeSet(size_t hashCode, const QSharedPointer<Dependency>& value) {
|
||||
QMutexLocker lock(&_instanceHashMutex);
|
||||
_instanceHash.insert(hashCode, value);
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,6 @@ private:
|
|||
size_t getHashCode() const;
|
||||
|
||||
QSharedPointer<Dependency> safeGet(size_t hashCode) const;
|
||||
void safeSet(size_t hashCode, const QSharedPointer<Dependency>& value);
|
||||
|
||||
QHash<size_t, QSharedPointer<Dependency>> _instanceHash;
|
||||
QHash<size_t, size_t> _inheritanceHash;
|
||||
|
@ -133,8 +132,16 @@ bool DependencyManager::isSet() {
|
|||
template <typename T, typename ...Args>
|
||||
QSharedPointer<T> DependencyManager::set(Args&&... args) {
|
||||
static size_t hashCode = manager().getHashCode<T>();
|
||||
QMutexLocker lock(&manager()._instanceHashMutex);
|
||||
|
||||
// clear the previous instance before constructing the new instance
|
||||
auto iter = manager()._instanceHash.find(hashCode);
|
||||
if (iter != manager()._instanceHash.end()) {
|
||||
iter.value().clear();
|
||||
}
|
||||
|
||||
QSharedPointer<T> newInstance(new T(args...), &T::customDeleter);
|
||||
manager().safeSet(hashCode, newInstance);
|
||||
manager()._instanceHash.insert(hashCode, newInstance);
|
||||
|
||||
return newInstance;
|
||||
}
|
||||
|
@ -142,8 +149,16 @@ QSharedPointer<T> DependencyManager::set(Args&&... args) {
|
|||
template <typename T, typename I, typename ...Args>
|
||||
QSharedPointer<T> DependencyManager::set(Args&&... args) {
|
||||
static size_t hashCode = manager().getHashCode<T>();
|
||||
QMutexLocker lock(&manager()._instanceHashMutex);
|
||||
|
||||
// clear the previous instance before constructing the new instance
|
||||
auto iter = manager()._instanceHash.find(hashCode);
|
||||
if (iter != manager()._instanceHash.end()) {
|
||||
iter.value().clear();
|
||||
}
|
||||
|
||||
QSharedPointer<T> newInstance(new I(args...), &I::customDeleter);
|
||||
manager().safeSet(hashCode, newInstance);
|
||||
_instanceHash.insert(hashCode, newInstance);
|
||||
|
||||
return newInstance;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue