Utiliser des QSharedPointer¶
Pour éviter les bugs de destruction des objets partagés (via l'utilisation de pointeurs) entre différentes classes je propose qu'on migre de
AbulEduFileV1* vers QSharedPointer<AbulEduFileV1>
Voici la démarche à adopter:
1. La création d'un AbulEduFileV1 partagé:¶
Dans les fichiers .h
- AbulEduFileV1 *m_abuleduFile; + QSharedPointer<AbulEduFileV1> m_abuleduFile;
Pensez bien à supprimer "*" quand on passe en QSharedPointer sinon vous allez faire des pointeurs vers des objets de type QSharedPointer ... ce qui n'est pas du tout l'objectif recherché !
Dans les fichiers .cpp
- m_abuleduFile = new AbulEduFileV1(); + m_abuleduFile = QSharedPointer<AbulEduFileV1>(new AbulEduFileV1, &QObject::deleteLater);
2. La suppression automatique dans les destructeurs¶
Pour que ça soit possible il faut absolument s'assurer qu'on passe dans les destructeurs, donc dans les classes et en particulier dans les interfaces (mainwindow, editeur etc.)
+ setAttribute(Qt::WA_DeleteOnClose);
Et c'est tout, d'une manière assez magique (c'est l'objet même des QSharedPointer), dès qu'il n'y a plus personne qui pointe vers le QSharedPointer il lance son destructeur et se nettoie donc tout seul au passage.