From aa79adef6f7ce985138db535ef4d8fe3325b3fc3 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 17 Aug 2014 20:33:19 +0200 Subject: [PATCH] QAbstractTransition: don't hold QPointers in QList QPointer is larger than a void*, so holding them in a QList is needlessly inefficient. Worse, the code could come to depend on the fragile property of (inefficient) QLists that references to elements therein never are invalidated. Change-Id: I52e83a26eda06fb9826e9c4773a7a0b84b0f59c7 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/statemachine/qabstracttransition.cpp | 2 +- src/corelib/statemachine/qabstracttransition_p.h | 3 ++- src/corelib/statemachine/qstate.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index 81b38ea4c4..7f04160a8f 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -254,7 +254,7 @@ QList QAbstractTransition::targetStates() const void QAbstractTransition::setTargetStates(const QList &targets) { Q_D(QAbstractTransition); - QList > copy(d->targetStates); + QVector > copy(d->targetStates); bool sameList = true; for (int i = 0; i < targets.size(); ++i) { QAbstractState *target = targets.at(i); diff --git a/src/corelib/statemachine/qabstracttransition_p.h b/src/corelib/statemachine/qabstracttransition_p.h index 4b0644acd9..1a28e5a73e 100644 --- a/src/corelib/statemachine/qabstracttransition_p.h +++ b/src/corelib/statemachine/qabstracttransition_p.h @@ -48,6 +48,7 @@ #include #include +#include #include QT_BEGIN_NAMESPACE @@ -72,7 +73,7 @@ public: QStateMachine *machine() const; void emitTriggered(); - QList > targetStates; + QVector > targetStates; QAbstractTransition::TransitionType transitionType; #ifndef QT_NO_ANIMATION diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp index 6e9fb63554..5abbbfd9ad 100644 --- a/src/corelib/statemachine/qstate.cpp +++ b/src/corelib/statemachine/qstate.cpp @@ -320,7 +320,7 @@ void QState::addTransition(QAbstractTransition *transition) } transition->setParent(this); - const QList > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; + const QVector > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; for (int i = 0; i < targets.size(); ++i) { QAbstractState *t = targets.at(i).data(); if (!t) {