From 79ab9305c1a46e2205ee9be7af7edb78c4483901 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 12 Jun 2025 17:01:15 +0200 Subject: [PATCH] QAccessibleWidgetV2: de-inline ctors and avoid QString default arg We should not use defaulted arguments of non-trivial type, because their construction and destruction, even if not passed, is repeated at every call site, producing O(n) executable code. By overloading out-of-line, we execute the same code at runtime, but a) we have only one copy of the arg construction and destruction, in the library, O(1) executable code production, and b) being out-of-line in the library, the compiler can optimize the call to the base class ctor away, if it wants to, because it sees its implementation. Found in API-review. Amends bb2121551c3d7b1af1553710bc211ba0e39b4212. Pick-to: 6.10 Task-number: QTBUG-98117 Change-Id: Ib6a3b15cc861893797c0445a91691132b21bbf2c Reviewed-by: Ivan Solovev Reviewed-by: Volker Hilsheimer --- src/widgets/accessible/qaccessiblewidget.cpp | 11 +++++++++++ src/widgets/accessible/qaccessiblewidget.h | 6 ++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp index 93f63977068..5c9c1fd80b9 100644 --- a/src/widgets/accessible/qaccessiblewidget.cpp +++ b/src/widgets/accessible/qaccessiblewidget.cpp @@ -483,6 +483,17 @@ void *QAccessibleWidget::interface_cast(QAccessible::InterfaceType t) // QAccessibleWidgetV2 implementation +QAccessibleWidgetV2::QAccessibleWidgetV2(QWidget *object, QAccessible::Role role, + const QString &name) + : QAccessibleWidget(object, role, name) +{ +} + +QAccessibleWidgetV2::QAccessibleWidgetV2(QWidget *object, QAccessible::Role role) + : QAccessibleWidgetV2(object, role, QString()) +{ +} + QAccessibleWidgetV2::~QAccessibleWidgetV2() = default; /*! \reimp */ diff --git a/src/widgets/accessible/qaccessiblewidget.h b/src/widgets/accessible/qaccessiblewidget.h index 1579bfa306e..d7d66b5ba91 100644 --- a/src/widgets/accessible/qaccessiblewidget.h +++ b/src/widgets/accessible/qaccessiblewidget.h @@ -67,10 +67,8 @@ class Q_WIDGETS_EXPORT QAccessibleWidgetV2 : public QAccessibleWidget, struct error2045 : QList {}; #endif public: - explicit QAccessibleWidgetV2(QWidget *object, QAccessible::Role role = QAccessible::Client, - const QString& name = QString()) - : QAccessibleWidget(object, role, name) - {} + explicit QAccessibleWidgetV2(QWidget *object, QAccessible::Role role = QAccessible::Client); + explicit QAccessibleWidgetV2(QWidget *object, QAccessible::Role role, const QString &name); ~QAccessibleWidgetV2() override; void *interface_cast(QAccessible::InterfaceType t) override;