diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2018-05-11 10:22:04 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-05-11 08:51:47 +0000 |
commit | 2dd213c34b5ba90cd811fada5b0c4494171abe46 (patch) | |
tree | 8861e4c4390901d5a165d30a3a807f66c7488a21 /src/qml/qml/qqmlopenmetaobject.cpp | |
parent | 9f5bd5ab102325b03c2afaae39c6927fa89a956c (diff) |
Minor QQmlOpenMetaObjectPrivate constructor cleanup
Use class initializers where possible and pass required values to the
constructor instead of initializing them afterwards. Also the use of
QQmlRefPointer allows for the elimination of manual reference counting.
Re-ordering the members shrinks the size on x86-64 from 56 to 48 bytes
per instance.
Change-Id: I214706175e3ddd69725cdb869bcde5b61aa02ee7
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlopenmetaobject.cpp')
-rw-r--r-- | src/qml/qml/qqmlopenmetaobject.cpp | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/qml/qml/qqmlopenmetaobject.cpp b/src/qml/qml/qqmlopenmetaobject.cpp index ce5983e05c..fc798a2c23 100644 --- a/src/qml/qml/qqmlopenmetaobject.cpp +++ b/src/qml/qml/qqmlopenmetaobject.cpp @@ -181,8 +181,8 @@ void QQmlOpenMetaObjectTypePrivate::init(const QMetaObject *metaObj) class QQmlOpenMetaObjectPrivate { public: - QQmlOpenMetaObjectPrivate(QQmlOpenMetaObject *_q) - : q(_q), parent(nullptr), type(nullptr), cacheProperties(false) {} + QQmlOpenMetaObjectPrivate(QQmlOpenMetaObject *_q, bool _autoCreate, QObject *obj) + : q(_q), object(obj), autoCreate(_autoCreate) {} struct Property { private: @@ -237,22 +237,19 @@ public: return data[idx].valueSet; } - bool autoCreate; QQmlOpenMetaObject *q; - QAbstractDynamicMetaObject *parent; + QAbstractDynamicMetaObject *parent = nullptr; QVector<Property> data; QObject *object; - QQmlOpenMetaObjectType *type; - bool cacheProperties; + QQmlRefPointer<QQmlOpenMetaObjectType> type; + bool autoCreate; + bool cacheProperties = false; }; QQmlOpenMetaObject::QQmlOpenMetaObject(QObject *obj, const QMetaObject *base, bool automatic) -: d(new QQmlOpenMetaObjectPrivate(this)) +: d(new QQmlOpenMetaObjectPrivate(this, automatic, obj)) { - d->autoCreate = automatic; - d->object = obj; - - d->type = new QQmlOpenMetaObjectType(base ? base : obj->metaObject(), nullptr); + d->type.adopt(new QQmlOpenMetaObjectType(base ? base : obj->metaObject(), nullptr)); d->type->d->referers.insert(this); QObjectPrivate *op = QObjectPrivate::get(obj); @@ -262,13 +259,9 @@ QQmlOpenMetaObject::QQmlOpenMetaObject(QObject *obj, const QMetaObject *base, bo } QQmlOpenMetaObject::QQmlOpenMetaObject(QObject *obj, QQmlOpenMetaObjectType *type, bool automatic) -: d(new QQmlOpenMetaObjectPrivate(this)) +: d(new QQmlOpenMetaObjectPrivate(this, automatic, obj)) { - d->autoCreate = automatic; - d->object = obj; - d->type = type; - d->type->addref(); d->type->d->referers.insert(this); QObjectPrivate *op = QObjectPrivate::get(obj); @@ -282,13 +275,12 @@ QQmlOpenMetaObject::~QQmlOpenMetaObject() if (d->parent) delete d->parent; d->type->d->referers.remove(this); - d->type->release(); delete d; } QQmlOpenMetaObjectType *QQmlOpenMetaObject::type() const { - return d->type; + return d->type.data(); } void QQmlOpenMetaObject::emitPropertyNotification(const QByteArray &propertyName) |