Question

J'utilise un QList assez complexe dans une dérivation de QAbstractTableModel pour stocker des données:

class MyTableModel : public QAbstractTableModel {
     Q_OBJECT   
     QList<QHash<int, QHash<int, QVariant> *> *> m_data;
     /*...*/
};

MyTableModel::~TMusicTableModel() {
     /* Should I deallocate QList items? */
}

MyTableModel::setData(int row, int col, int type, QVariant value) {
    /* inserting a new data field */
    QHash<int, QHash<int, QVariant> *> *row_hash = new QHash<int, QHash<int, QVariant> *>();
    QHash<int, QVariant> *role_hash = new QHash<int, QVariant>();
    type_hash->insert(type, value);
    row_hash->insert(col, type_hash);
    m_data.insert(row, row_hash);
    return true;
}

Je me demande si le QList et QHashes prendre soin du deallaction ou si je dois le faire. La documentation est pas très instructif dans ce cas.

Était-ce utile?

La solution

Parce que vous créez les sous-éléments avec « nouveau », vous ne devez les désaffecter vous. Voir la fonction qDeleteAll un moyen rapide de le faire.

Y at-il une raison pour laquelle vous utilisez pour créer ces nouveaux hashs? (Votre code est évidemment juste un extrait, de sorte que les pointeurs peuvent être utilisés et circulaient ailleurs.) En général, il est beaucoup plus simple de les construire sur la pile de sorte que la destruction se fait automatiquement.

Autres conseils

Comme toute autre classe de conteneur dans pratiquement bibliothèque ++ tout C, destructing il active aussi le destructor des éléments qu'il contient. cela est vrai pour un MyClass array[3] simple, pour STL vector<MyClass> et pour le QList<MyClass> QT ainsi.
Pour vous assurer que tout vous détruit devez vous assurer que MyClass a une destructor qui désalloue en effet toutes les ressources. Avoir un QList de pointeurs ne respecte pas cette règle parce que les pointeurs ne sont pas Destructeurs. au contraire, vous pouvez utiliser la shared_ptr de boost ou d'écrire votre propre wrapper pointeur intelligent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top