diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2021-02-25 12:49:21 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2021-03-04 06:49:02 +0100 |
commit | fe9d7bf759d116f99131d14ac8b1fb44b2bc62fd (patch) | |
tree | a5ca60d3af44dcf5442a91abf9b007ac18c7203d | |
parent | 712117f8b89cdb2578d6aaa424141da216799fe9 (diff) |
QScopedPointer: deprecate swap
Follow up of 612a01be6513894ab1ec5a36b699a2142ba7f35c
(deprecating QSP::take()): for the same reasons, swap()
functions do not belong to QScopedPointer, or they would
allow the pointer to escape:
QScopedPointer a;
{
QScopedPointer b = ~~~;
qSwap(a, b);
}
// b's pointer escaped its scope
Deprecate them as well.
[ChangeLog][QtCore][QScopedPointer] QScopedPointer swapping
functions have been deprecated, as they would allow the
managed pointer to escape the scope. If you need those semantics,
use std::unique_ptr instead.
Change-Id: I2b0938b62f2ef5a3561f61f595a3fb4c505a8f08
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r-- | src/corelib/tools/qscopedpointer.cpp | 10 | ||||
-rw-r--r-- | src/corelib/tools/qscopedpointer.h | 12 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index 1dd77a22dc..2f9f6f0dd4 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -267,6 +267,10 @@ QT_BEGIN_NAMESPACE */ /*! \fn template <typename T, typename Cleanup> void QScopedPointer<T, Cleanup>::swap(QScopedPointer<T, Cleanup> &lhs, QScopedPointer<T, Cleanup> &rhs) + + \obsolete Use std::unique_ptr instead; this function may let a pointer + escape its scope. + Swaps \a lhs with \a rhs. */ @@ -333,7 +337,11 @@ QT_BEGIN_NAMESPACE */ /*! \fn template <typename T, typename Cleanup> void QScopedArrayPointer<T, Cleanup>::swap(QScopedArrayPointer<T, Cleanup> &other) - Swap this pointer with \a other. + + \obsolete Use std::unique_ptr instead; this function may let a pointer + escape its scope. + + Swap this pointer with \a other. */ QT_END_NAMESPACE diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index a4c57aab8a..5c72e7415d 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -169,10 +169,13 @@ public: } #endif +#if QT_DEPRECATED_SINCE(6, 2) + QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedPointer.") void swap(QScopedPointer<T, Cleanup> &other) noexcept { qSwap(d, other.d); } +#endif typedef T *pointer; @@ -206,8 +209,11 @@ public: return !rhs.isNull(); } +#if QT_DEPRECATED_SINCE(6, 2) + QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedPointer.") friend void swap(QScopedPointer<T, Cleanup> &p1, QScopedPointer<T, Cleanup> &p2) noexcept { p1.swap(p2); } +#endif protected: T *d; @@ -240,8 +246,11 @@ public: return this->d[i]; } +#if QT_DEPRECATED_SINCE(6, 2) + QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedArrayPointer.") void swap(QScopedArrayPointer &other) noexcept // prevent QScopedPointer <->QScopedArrayPointer swaps { QScopedPointer<T, Cleanup>::swap(other); } +#endif private: explicit inline QScopedArrayPointer(void *) @@ -259,9 +268,12 @@ private: Q_DISABLE_COPY(QScopedArrayPointer) }; +#if QT_DEPRECATED_SINCE(6, 2) template <typename T, typename Cleanup> +QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedArrayPointer.") inline void swap(QScopedArrayPointer<T, Cleanup> &lhs, QScopedArrayPointer<T, Cleanup> &rhs) noexcept { lhs.swap(rhs); } +#endif QT_END_NAMESPACE |