QSharedDataPointer: use swap-and-move in the move constructor
This makes the pointer that was in the moved-into object be destroyed before the return of this function (if the reference count was 1), instead of letting it live in the moved-from object. Task-number: QTBUG-66322 Change-Id: I3debfc11127e4516b505fffd151209292bd3adaa Reviewed-by: Lars Knoll <lars.knoll@qt.io>bb10
parent
dabc76de80
commit
323b00e38c
|
|
@ -115,7 +115,11 @@ public:
|
|||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
QSharedDataPointer(QSharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = nullptr; }
|
||||
inline QSharedDataPointer<T> &operator=(QSharedDataPointer<T> &&other) Q_DECL_NOTHROW
|
||||
{ qSwap(d, other.d); return *this; }
|
||||
{
|
||||
QSharedDataPointer moved(std::move(other));
|
||||
swap(moved);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline bool operator!() const { return !d; }
|
||||
|
|
@ -204,7 +208,11 @@ public:
|
|||
#ifdef Q_COMPILER_RVALUE_REFS
|
||||
inline QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = nullptr; }
|
||||
inline QExplicitlySharedDataPointer<T> &operator=(QExplicitlySharedDataPointer<T> &&other) Q_DECL_NOTHROW
|
||||
{ qSwap(d, other.d); return *this; }
|
||||
{
|
||||
QExplicitlySharedDataPointer moved(std::move(other));
|
||||
swap(moved);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
inline bool operator!() const { return !d; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue