From 6c18b438a3787db9fb407653d6ebb373aba53ef1 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 15 Apr 2025 22:26:31 +0200 Subject: [PATCH] QMetaObject: port QArgumentType to QByteArrayView Now that argumentTypesFromString() actually doesn't normalize types anymore, all type names are substrings of the signature, and so QByteArrayView suffices (was: QByteArray) to hold the result. QArgumentType in only used transitively, during QMetaObject member function or QObject::connect() calls, so the source string will also never go out of scope before the QArgumentType object that references it. As a drive-by, make the QArgumentType ctor explicit and port from QVLA::op+=() to emplace_back(). No discernable impact on tst_bench_qobject's connect_disconnect. Task-number: QTBUG-135572 Change-Id: If6544917b9df8191a256dc2a67e31c6b7e5a38cb Reviewed-by: Thiago Macieira --- src/corelib/kernel/qmetaobject.cpp | 3 +-- src/corelib/kernel/qmetaobject_p.h | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 5f2fccfa5a8..bee788f1d5b 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -832,8 +832,7 @@ static void argumentTypesFromString(const char *str, const char *end, --level; ++str; } - QByteArray argType(begin, str - begin); - types += QArgumentType(std::move(argType)); + types.emplace_back(QByteArrayView{begin, str - begin}); } } diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h index eb41f40ec41..f56d5aacd89 100644 --- a/src/corelib/kernel/qmetaobject_p.h +++ b/src/corelib/kernel/qmetaobject_p.h @@ -45,8 +45,8 @@ public: QArgumentType(QMetaType metaType) : _metaType(metaType) {} - QArgumentType(const QByteArray &name) - : _metaType(QMetaType{qMetaTypeTypeInternal(qToByteArrayViewIgnoringNull(name))}), _name(name) + explicit QArgumentType(QByteArrayView name) + : _metaType(QMetaType{qMetaTypeTypeInternal(name)}), _name(name) {} QMetaType metaType() const noexcept { return _metaType; } @@ -69,7 +69,7 @@ private: Q_DECLARE_EQUALITY_COMPARABLE_NON_NOEXCEPT(QArgumentType) QMetaType _metaType; - QByteArray _name; + QByteArrayView _name; }; Q_DECLARE_TYPEINFO(QArgumentType, Q_RELOCATABLE_TYPE);