From e215b930e2d80935e3b36c7d46647dcef29834e5 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 26 Mar 2025 16:08:54 +0100 Subject: [PATCH] tst_QTreeView: fix memleak in fetchUntilScreenFull() The TreeModel class was lacking the destructor, so the m_root TreeItem was never deleted (it was held in a non-owning pointer and had no parent). Instead of adding ~TreeModel(), port to holding m_root in unique_ptr instead. This creates a bit more churn, but communicates intent better, and makes sure the item is never without an owner. Amends e74af68654c0eb127277c73e20bda409b83d157b. As a drive-by, fix the indent of the else clause of a ternary. Pick-to: 6.8 6.5 5.15 Change-Id: I2f5c8852b8bee89c63933c118a4599d6a17de8e2 Reviewed-by: Axel Spoerl (cherry picked from commit 7cf8b2d0303ea81a8e22fcaee7db7bb7303d0376) Reviewed-by: Qt Cherry-pick Bot --- .../widgets/itemviews/qtreeview/tst_qtreeview.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 4920eb54b07..d217e1596d4 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -5091,7 +5091,7 @@ void tst_QTreeView::fetchUntilScreenFull() rootData.append(rootData1); rootData.append(rootData2); - m_root = new TreeItem(rootData, nullptr); + m_root = std::make_unique(rootData, nullptr); QVariant childData1("Col 1"); QVariant childData2("Col 2"); @@ -5099,7 +5099,7 @@ void tst_QTreeView::fetchUntilScreenFull() childData.append(childData1); childData.append(childData2); - TreeItem* item_1 = new TreeItem(childData, m_root); + TreeItem* item_1 = new TreeItem(childData, m_root.get()); m_root->children.append(item_1); TreeItem* item_2 = new TreeItem(childData, item_1); @@ -5113,7 +5113,7 @@ void tst_QTreeView::fetchUntilScreenFull() return QModelIndex(); TreeItem* parentItem = - parent.isValid() ? static_cast(parent.internalPointer()) : m_root; + parent.isValid() ? static_cast(parent.internalPointer()) : m_root.get(); TreeItem* childItem = parentItem->children.at(row); return createIndex(row, column, childItem); } @@ -5124,7 +5124,7 @@ void tst_QTreeView::fetchUntilScreenFull() return 0; TreeItem* parentItem = parent.isValid() ? static_cast(parent.internalPointer()) - : m_root; + : m_root.get(); return parentItem->children.size(); } @@ -5137,7 +5137,7 @@ void tst_QTreeView::fetchUntilScreenFull() TreeItem* parentItem = static_cast(childIndex.internalPointer())->parent; - return parentItem == m_root ? QModelIndex() + return parentItem == m_root.get() ? QModelIndex() : createIndex(parentItem->rowInParent(), 0, parentItem); } @@ -5201,7 +5201,7 @@ void tst_QTreeView::fetchUntilScreenFull() QVector children; TreeItem* parent = nullptr; }; - TreeItem* m_root; + std::unique_ptr m_root; }; if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))