Domanda

Io sto usando un QList piuttosto complesso in una derivazione di QAbstractTableModel per memorizzare i dati:

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

Mi chiedo se il QList e QHashes si prendono cura della deallaction o se devo farlo. La documentazione non è molto informativo in questo caso.

È stato utile?

Soluzione

Perché si sta creando le voci secondarie con "nuovo", si ha a rilasciare da soli. Vedere la funzione qDeleteAll di un modo rapido di farlo.

C'è un motivo per cui si sta utilizzando nuovi per creare questi hashs? (Il codice è ovviamente solo un frammento, in modo che i puntatori possono essere utilizzati e passati in giro altrove.) In generale, è molto più semplice per loro di costruire solo sullo stack in modo che la distruzione avviene automaticamente.

Altri suggerimenti

Come qualsiasi altra classe contenitore praticamente in qualsiasi libreria C ++, distruggendo si attiva anche il distruttore degli elementi in esso. questo è vero per un semplice MyClass array[3], per STL vector<MyClass> e per QList<MyClass> di QT pure.
Per assicurarsi che tutto è distrutto il necessario per fare in modo che MyClass ha un distruttore che rilascia effettivamente tutte le risorse. Avere un QList di puntatori non seguire questa regola, perché i puntatori non hanno distruttori. invece si consiglia di utilizzare shared_ptr di spinta o lascia la tua puntatore involucro intelligente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top