Frage

Ich verwende einen ziemlich komplexen QList in einer Ableitung von QAbstractTableModel Daten zu speichern:

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;
}

Ich frage mich, ob der QList und QHashes des deallaction kümmern, oder wenn ich es tun soll. Die Dokumentation ist nicht sehr informativ in diesem Fall.

War es hilfreich?

Lösung

Da Sie die Unterpunkte mit „neuen“ erstellen, müssen Sie sie selbst freizugeben. Siehe die qDeleteAll Funktion für eine schnelle Art und Weise, dies zu tun.

Gibt es einen Grund, warum Sie neu verwenden diese hashs zu schaffen? (Der Code ist natürlich nur ein Ausschnitt, so dass die Zeiger verwendet werden könnten, und um an anderer Stelle übergeben.) Im Allgemeinen ist es viel einfacher, nur um sie auf dem Stapel zu bauen, so dass die Zerstörung automatisch geschieht.

Andere Tipps

Wie bei jeder anderen Container-Klasse in praktisch jeden C ++ Bibliothek, zerstörenden es aktiviert auch den destructor der Elemente. Dies ist für eine einfache MyClass array[3], für STL vector<MyClass> und für Qt QList<MyClass> auch wahr.
Um sicherzustellen, dass alles ist Sie sicherstellen müssen zerstört, dass MyClass eine destructor hat, die in der Tat alle Ressourcen freigibt. keinen QList von Zeigern mit dieser Regel folgen, weil Zeiger nicht Destruktoren haben. stattdessen können Sie boost die shared_ptr oder schreiben Sie Ihren eigenen Smart-Pointer-Wrapper verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top