문제

데이터 저장을 위해 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가 거래를 처리하는지 또는 해야하는지 궁금합니다. 이 경우 문서는 유익하지 않습니다.

도움이 되었습니까?

해결책

"새"로 하위 항목을 만들기 때문에 직접 거래해야합니다. 빠른 방법은 Qdeleteall 기능을 참조하십시오.

이 해시를 만들기 위해 새로운 것을 사용하는 이유가 있습니까? (코드는 분명히 스 니펫이므로 포인터를 사용하여 다른 곳에서 통과 할 수 있습니다.) 일반적으로 파괴가 자동으로 발생할 수 있도록 스택에 구성하는 것이 훨씬 간단합니다.

다른 팁

실질적으로 C ++ 라이브러리의 다른 컨테이너 클래스와 마찬가지로 파괴하면 요소의 파괴자도 활성화됩니다. 이것은 단순한 경우에 해당됩니다 MyClass array[3], stl vector<MyClass> 그리고 QT의 경우 QList<MyClass> 또한.
모든 것이 파괴되도록하려면 MyClass에 실제로 모든 자원을 거래하는 소멸자가 있는지 확인해야합니다. 포인터의 Qlist를 갖는 것은 포인터가 소멸자가 없기 때문에이 규칙을 따르지 않습니다. 대신 boost의 shared_ptr을 사용하거나 자신의 스마트 포인터 래퍼를 작성할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top