diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qvariant.h | 1 | ||||
-rw-r--r-- | src/corelib/kernel/qvariant_p.h | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 1fd304e772..d93df46275 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -78,6 +78,7 @@ public: private: inline PrivateShared() : ref(1) { } public: + static size_t computeAllocationSize(size_t size, size_t align); static PrivateShared *create(size_t size, size_t align); static void free(PrivateShared *p); diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h index f5f4d0fb8a..8787f140f8 100644 --- a/src/corelib/kernel/qvariant_p.h +++ b/src/corelib/kernel/qvariant_p.h @@ -34,7 +34,7 @@ customConstructShared(size_t size, size_t align, F &&construct) return ptr.release(); } -inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, size_t align) +inline size_t QVariant::PrivateShared::computeAllocationSize(size_t size, size_t align) { size += sizeof(PrivateShared); if (align > sizeof(PrivateShared)) { @@ -44,6 +44,12 @@ inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, siz // alignment. size += align - sizeof(PrivateShared); } + return size; +} + +inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, size_t align) +{ + size = computeAllocationSize(size, align); void *data = operator new(size); auto *ps = new (data) QVariant::PrivateShared(); ps->offset = int(((quintptr(ps) + sizeof(PrivateShared) + align - 1) & ~(align - 1)) - quintptr(ps)); |