summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <[email protected]>2025-04-06 14:32:07 +0200
committerQt Cherry-pick Bot <[email protected]>2025-04-18 23:23:15 +0000
commit9a6b7641e8214258ac2572305538180bf44eb321 (patch)
tree54218dde1a38ed72bb693893655313691f299005
parent6d6d76f9cf2ffd159c2f44bf3fe4cdde3a1ba747 (diff)
QMainWindowLayout: de-pessimize ~QMainWindowToolBar
As the code comment says, ~QMainWindowTabBar will removeOne(this) from QMainWindowLayout::unusedTabBars. It doesn't assert that it was included in it, or something special like that. So we can optimize the whole thing by making sure that ~QMainWindowTabBar doesn't find anything to remove here, avoiding a detach from the copy 'bars' and potentially also avoiding quadratic behavior, as we delete the items in order. Found by Coverity, but it only saw this as an optimization opportunity because it doesn't understand that the copy is needed. Amends 23357e59bb4dc54e76a237b290aa64a620db2ea1. Pick-to: 6.5 Coverity-Id: 479705 Change-Id: I6c31e028c0c39813768e8c71076471b39bd8ef5a Reviewed-by: Axel Spoerl <[email protected]> (cherry picked from commit fb7670f193712fae2d4c03d6ee2a6c30101b886f) Reviewed-by: Qt Cherry-pick Bot <[email protected]> (cherry picked from commit df8f7becfc38ad6441a7f409525c2becc1e3bf93)
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index f115130a047..c2ec55aa8a9 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -2731,8 +2731,9 @@ QMainWindowLayout::~QMainWindowLayout()
#if QT_CONFIG(dockwidget) && QT_CONFIG(tabwidget)
// unusedTabBars contains unparented tab bars, which need to be removed manually.
- // ~QMainWindowTabBar() removes the barĀ from unusedTabBars => call qDeleteAll() on a copy.
- const auto bars = unusedTabBars;
+ // ~QMainWindowTabBar() attempts to remove the barĀ from unusedTabBars
+ // => move it out of the way first.
+ const auto bars = std::move(unusedTabBars);
qDeleteAll(bars);
#endif // QT_CONFIG(dockwidget) && QT_CONFIG(tabwidget)
}