mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 17:01:18 +02:00
Merge branch 'applications_diet' into applications_diet_cpp11
This commit is contained in:
commit
8a76429a0e
1 changed files with 10 additions and 15 deletions
|
@ -20,7 +20,14 @@
|
||||||
public:\
|
public:\
|
||||||
typedef QSharedPointer<T> SharedPointer;\
|
typedef QSharedPointer<T> SharedPointer;\
|
||||||
private:\
|
private:\
|
||||||
void customDeleter() { delete this; }\
|
void customDeleter() {\
|
||||||
|
QObject* thisObject = dynamic_cast<QObject*>(this);\
|
||||||
|
if (thisObject) {\
|
||||||
|
thisObject->deleteLater();\
|
||||||
|
} else {\
|
||||||
|
delete this;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
friend class DependencyManager;
|
friend class DependencyManager;
|
||||||
|
|
||||||
class QObject;
|
class QObject;
|
||||||
|
@ -36,23 +43,11 @@ private:
|
||||||
static DependencyManager& getInstance();
|
static DependencyManager& getInstance();
|
||||||
DependencyManager() {}
|
DependencyManager() {}
|
||||||
~DependencyManager();
|
~DependencyManager();
|
||||||
|
|
||||||
static void noDelete(void*) {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
QSharedPointer<T> DependencyManager::get() {
|
QSharedPointer<T> DependencyManager::get() {
|
||||||
static QSharedPointer<T> sharedPointer;
|
static QSharedPointer<T> sharedPointer = QSharedPointer<T>(new T(), &T::customDeleter);
|
||||||
static T* instance = new T();
|
|
||||||
|
|
||||||
if (instance) {
|
|
||||||
if (dynamic_cast<QObject*>(instance) != NULL) { // If this is a QOject, call deleteLater for destruction
|
|
||||||
sharedPointer = QSharedPointer<T>(instance, &T::deleteLater);
|
|
||||||
} else { // Otherwise use custom deleter to avoid issues between private destructor and QSharedPointer
|
|
||||||
sharedPointer = QSharedPointer<T>(instance, &T::customDeleter);
|
|
||||||
}
|
|
||||||
instance = NULL;
|
|
||||||
}
|
|
||||||
return sharedPointer;
|
return sharedPointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue