summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-04-04 08:44:17 -0700
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-04-14 06:16:39 +0000
commit9a39bc6e8cd2c0310c72a2a4659414c4642f0d57 (patch)
tree0cc668aab811c9ac47f3ed3f25d38176eabce844
parent47bf1a575651f98bc5860cf0feb79908c135354e (diff)
QObjectPrivate: use placement new/delete for SignalVector
Just to be pedantically correct, but also makes the construction code slightly more readable. Change-Id: I29f1c141c0f7436393d9fffd16e2bbf0f361c024 Reviewed-by: Marc Mutz <marc.mutz@qt.io> (cherry picked from commit d1e9cab81ca94f450b1391822091ed81fec60c92) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/corelib/kernel/qobject_p.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 996d8d1d19..7592cefaf5 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -276,8 +276,10 @@ public:
if (c)
deleteOrphaned(c);
SignalVector *v = signalVector.loadRelaxed();
- if (v)
+ if (v) {
+ v->~SignalVector();
free(v);
+ }
}
// must be called on the senders connection data
@@ -308,7 +310,9 @@ public:
if (vector && vector->allocated > size)
return;
size = (size + 7) & ~7;
- SignalVector *newVector = reinterpret_cast<SignalVector *>(malloc(sizeof(SignalVector) + (size + 1) * sizeof(ConnectionList)));
+ void *ptr = malloc(sizeof(SignalVector) + (size + 1) * sizeof(ConnectionList));
+ auto newVector = new (ptr) SignalVector;
+
int start = -1;
if (vector) {
// not (yet) existing trait: