diff options
author | Liang Qi <liang.qi@qt.io> | 2017-04-18 10:43:17 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-04-18 10:46:22 +0200 |
commit | 18934bcb0c388eb4723043cb5001702fecaf90bc (patch) | |
tree | 59f4f1e5de00fa49e49bace1a38f1bce52e48457 /src/corelib/tools/qsharedpointer_impl.h | |
parent | bc5454d2c41873349ea32c42aca8fc794cba442e (diff) | |
parent | d1210281e41008ce2e3510aa5cfb3ebea1c57734 (diff) |
Merge remote-tracking branch 'origin/5.8' into 5.9
Conflicts:
src/corelib/global/qglobal.cpp
Change-Id: I375fa4afa662fa411a15f212ebd5f2f0dffdba7f
Diffstat (limited to 'src/corelib/tools/qsharedpointer_impl.h')
-rw-r--r-- | src/corelib/tools/qsharedpointer_impl.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 0d42c8a212..15573c5588 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -260,6 +260,7 @@ namespace QtSharedPointer { internalSafetyCheckRemove(self); deleter(self); } + static void noDeleter(ExternalRefCountData *) { } static inline ExternalRefCountData *create(T **ptr, DestroyerFn destroy) { @@ -433,11 +434,13 @@ public: # else typename Private::DestroyerFn destroy = &Private::deleter; # endif + typename Private::DestroyerFn noDestroy = &Private::noDeleter; QSharedPointer result(Qt::Uninitialized); - result.d = Private::create(&result.value, destroy); + result.d = Private::create(&result.value, noDestroy); // now initialize the data new (result.data()) T(std::forward<Args>(arguments)...); + result.d->destroyer = destroy; result.d->setQObjectShared(result.value, true); # ifdef QT_SHAREDPOINTER_TRACK_POINTERS internalSafetyCheckAdd(result.d, result.value); |