aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/memory
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-03-11 15:26:06 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-03-12 10:38:40 +0100
commite7decc7637e9eb7e66a0d19705090f18488028c0 (patch)
treec5e6e2fd10d8e9bb91295b71d6c718009b374ae7 /src/qml/memory
parentf78e542053cfc1d5c1b26d6fa4d18ef1698359a0 (diff)
MemoryManager: Forward arguments to init()
The templating transforms references into their base types. Passing those through involves copying, and refcount ping-pong for QQmlRefPointers. Use forwarding references and std::forward to avoid this. Change-Id: I2524b53b9e06fadcc67a78c6ebf04f5bc2da354b Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/memory')
-rw-r--r--src/qml/memory/qv4mm_p.h20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/qml/memory/qv4mm_p.h b/src/qml/memory/qv4mm_p.h
index 6dfdd81cb2..74a760d093 100644
--- a/src/qml/memory/qv4mm_p.h
+++ b/src/qml/memory/qv4mm_p.h
@@ -212,46 +212,46 @@ public:
}
template <typename ManagedType, typename Arg1>
- typename ManagedType::Data *allocWithStringData(std::size_t unmanagedSize, Arg1 arg1)
+ typename ManagedType::Data *allocWithStringData(std::size_t unmanagedSize, Arg1 &&arg1)
{
typename ManagedType::Data *o = reinterpret_cast<typename ManagedType::Data *>(allocString(unmanagedSize));
o->internalClass.set(engine, ManagedType::defaultInternalClass(engine));
Q_ASSERT(o->internalClass && o->internalClass->vtable);
- o->init(arg1);
+ o->init(std::forward<Arg1>(arg1));
return o;
}
template <typename ObjectType, typename... Args>
- typename ObjectType::Data *allocObject(Heap::InternalClass *ic, Args... args)
+ typename ObjectType::Data *allocObject(Heap::InternalClass *ic, Args&&... args)
{
typename ObjectType::Data *d = allocateObject<ObjectType>(ic);
- d->init(args...);
+ d->init(std::forward<Args>(args)...);
return d;
}
template <typename ObjectType, typename... Args>
- typename ObjectType::Data *allocObject(InternalClass *ic, Args... args)
+ typename ObjectType::Data *allocObject(InternalClass *ic, Args&&... args)
{
typename ObjectType::Data *d = allocateObject<ObjectType>(ic);
- d->init(args...);
+ d->init(std::forward<Args>(args)...);
return d;
}
template <typename ObjectType, typename... Args>
- typename ObjectType::Data *allocate(Args... args)
+ typename ObjectType::Data *allocate(Args&&... args)
{
Scope scope(engine);
Scoped<ObjectType> t(scope, allocateObject<ObjectType>());
- t->d_unchecked()->init(args...);
+ t->d_unchecked()->init(std::forward<Args>(args)...);
return t->d();
}
template <typename ManagedType, typename... Args>
- typename ManagedType::Data *alloc(Args... args)
+ typename ManagedType::Data *alloc(Args&&... args)
{
Scope scope(engine);
Scoped<ManagedType> t(scope, allocManaged<ManagedType>(sizeof(typename ManagedType::Data)));
- t->d_unchecked()->init(args...);
+ t->d_unchecked()->init(std::forward<Args>(args)...);
return t->d();
}