我使用一个相当复杂的QList在QAbstractTableModel的推导来存储数据:

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

我想知道如果的QList和QHashes采取deallaction的照顾,或者我应该这样做。文件是不是在这种情况下非常丰富。

有帮助吗?

解决方案

由于您在创建与“新”的,你必须自己取消分配这些子项。见qDeleteAll功能,这样做的快捷方式。

有一个原因,你正在使用新创建这些hashs为什么呢? (你的代码显然只是一个片段,因此指针可以用来和周围其他地方通过。)一般情况下,这是更简单,只是构建它们在堆栈上,这样的破坏自动发生。

其他提示

像几乎任何C ++库的任何其它容器类,破坏它也激活在它的元件的析构函数。这是一个简单的MyClass array[3]真的,因为STL vector<MyClass>和QT的QList<MyClass>为好。结果 为了确保一切都被摧毁,你需要确保MyClass的有析构函数,确实将释放所有资源。有一个指针的QList不遵循这个规则,因为指针没有析构函数。相反,你可能想使用Boost的shared_ptr的或写你自己的智能指针包装。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top