繁体   English   中英

如何清理复杂的QList?

[英]How to clean up a complex QList?

我在QAbstractTableModel的派生中使用了一个相当复杂的QList来存储数据:

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还是应该这样做。 在这种情况下,文档不是非常有用。

因为您要使用“ new”创建子项,所以必须自己取消分配它们。 有关快速方法,请参见qDeleteAll函数。

您为什么要使用new来创建这些哈希? (您的代码显然只是一小段,因此指针可以在其他地方使用和传递。)通常,仅将它们构造在堆栈上以使销毁自动发生会容易得多。

与几乎所有C ++库中的任何其他容器类一样,对其进行销毁也会激活其中的元素的析构函数。 对于简单的MyClass array[3] ,对于STL vector<MyClass>以及QT的QList<MyClass>都是如此。
为了确保所有内容都被销毁,您需要确保MyClass具有确实可以释放所有资源的析构函数。 具有指针QList不会遵循此规则,因为指针没有析构函数。 相反,您可能要使用boost的shared_ptr或编写自己的智能指针包装器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM