Je viens de recompiler avec la version 1.1.8, et j'ai pas ce problème.
Avec la nouvelle version 1.1.9, ça recommence.
Voici la liste des m_sKeySingleton des pSingleton pour lesquels pSingleton->deleteInstance() est invoqué :
"qx::QxSingletonX"
"qx::QxClass_domain.collectivite.commune"
"qx::QxDataMemberX_QObject"
"qx::QxClass_QObject" c'est lui qui déclenche QAssert
"qx::QxSqlDatabase"
"qx::QxFactoryX"
"qx::QxDataMemberX_domain.collectivite.commune"
"qx::QxClassX"
Et ceux si je lance et ferme l'appli sans utiliser d'appels à la BDD :
"qx::QxSingletonX"
"qx::QxSqlDatabase"
"qx::QxFactoryX"
J'ai déposé un point d'arrêt sur
bool QxSingletonX::addSingleton(const QString & sKey, IxSingleton * pSingleton)
et j'ai remonté la pile pour trouver le coupable qui instanciait le singleton QxClass_QObject et c'est
qx::QxClass<domain::collectivite::commune>::init
avec
m_eDaoStrategy = QxClass<typename QxClass<T>::type_base_class>::getSingleton()->getDaoStrategy();
Je précise que domain::collectivite::commune hérite de QObject et est enregistré dans le contexte par
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| QX_REGISTER_PRIMARY_KEY(domain::collectivite::commune, QString)
QX_REGISTER_COMPLEX_CLASS_NAME_HPP_SYNERGIE(domain::collectivite::commune, QObject, 1, domain_collectivite_commune)
// et aussi
template <> void register_class(QxClass<domain::collectivite::commune> &t)
{
IxDataMember * pData = NULL;
// IxFunction * pFct = NULL;
t.setName("commune");
pData = t.id(& domain::collectivite::commune::m_commune, "commune");
pData = t.data(& domain::collectivite::commune::m_insee, "insee");
pData = t.data(& domain::collectivite::commune::m_centreBourg, "centrebourg");
} |
J'ai déposé un point d'arrêt sur
bool QxSingletonX::removeSingleton(const QString & sKey)
J'ai activé _QX_USE_TRACE_CONSTRUCTOR_DESTRUCTOR et rien d'anormal, voici la sortie :
[QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
[QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
[QxOrm] qx::IxSingleton constructor 'qx::QxClass_domain.collectivite.commune'
[QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_domain.collectivite.commune'
[QxOrm] qx::IxSingleton constructor 'qx::QxClass_QObject'
[QxOrm] qx::IxSingleton constructor 'qx::QxClassX'
[QxOrm] qx::IxSingleton constructor 'qx::QxDataMemberX_QObject'
...
[QxOrm] qx::IxSingleton destructor 'qx::QxClass_domain.collectivite.commune'
[QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_QObject'
[QxOrm] qx::IxSingleton destructor 'qx::QxClass_QObject'
ASSERT: "exist(key)" in file c:\dev\projets\qxorm\include\qxcollection\../../inl/QxCollection/QxCollection.inl, line 274
[QxOrm] qx::IxSingleton destructor 'qx::QxSqlDatabase'
[QxOrm] qx::IxSingleton destructor 'qx::QxFactoryX'
[QxOrm] qx::IxSingleton destructor 'qx::QxDataMemberX_domain.collectivite.commune'
[QxOrm] qx::IxSingleton destructor 'qx::QxClassX'
[QxOrm] qx::IxSingleton destructor 'qx::QxSingletonX'
Je comprends pas trop
'qx::QxClass_QObject' ne serait'il pas supprimé en cascade par par 'qx::QxDataMemberX_QObject' dabord ?
Ps : les tests fonctionnent, mais je crois pas que les classes persistantes dérivent de QObject...
Partager