Pregunta

Estoy usando un QList bastante complejo en una derivación de QAbstractTableModel para almacenar datos:

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

Me pregunto si el QList y QHashes cuidan la deallaction o si debería hacerlo. La documentación no es muy informativo en este caso.

¿Fue útil?

Solución

Debido a que está creando los sub elementos con "nuevo", usted tiene que anular la planificación de su propia cuenta. Véase la función qDeleteAll una forma rápida de hacerlo.

¿Hay una razón por la que está utilizando para crear estos nuevos hashs? (Su código es obviamente sólo un fragmento, por lo que los indicadores podrían ser utilizados y pasan alrededor en otros lugares.) Por lo general, es mucho más sencillo de construir solo en la pila de modo que la destrucción se realiza automáticamente.

Otros consejos

Como cualquier otra clase de contenedor en prácticamente cualquier biblioteca de C ++, destructing También activa el destructor de los elementos en el mismo. esto es cierto para un simple MyClass array[3], por vector<MyClass> STL y para QList<MyClass> de QT también.
Para asegurarse de que todo se destruye lo que necesita para asegurarse de que MyClass tiene un destructor que, efectivamente, desasigna todos los recursos. Tener un QList de punteros no se sigue esta regla porque los punteros no tienen destructores. en cambio es posible que desee utilizar shared_ptr de impulso o escribir su propio envoltorio de puntero inteligente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top