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 <ivan.solovev@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Marc Mutz 2025-06-12 17:01:15 +02:00
parent 295933aadc
commit 79ab9305c1
2 changed files with 13 additions and 4 deletions

View File

@ -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 */

View File

@ -67,10 +67,8 @@ class Q_WIDGETS_EXPORT QAccessibleWidgetV2 : public QAccessibleWidget,
struct error2045 : QList<QAccessible::Attribute> {};
#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;