diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-11-01 16:53:26 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-11-20 14:28:31 +0100 |
commit | 612a01be6513894ab1ec5a36b699a2142ba7f35c (patch) | |
tree | 4018c688b737c9b010677d2c419cb719b9ed9e68 | |
parent | 5dd7e7b7a826d5d4314dffaaf20d465460616998 (diff) | |
download | qtbase-612a01be6513894ab1ec5a36b699a2142ba7f35c.tar.gz |
Deprecate QScopedPointer::take()
We've decided that QScopedPointer shouldn't be movable,
because it would break the semantics of being "scoped"
(the pointer/pointee won't survive the scope).
Then, QScopedPointer shouldn't allow for take() either.
If you need those semantics, reach for unique_ptr.
[ChangeLog][QtCore][QScopedPointer] The take() function
has been deprecated. This was an API mistake, as it
allowed the pointer/pointee to escape from the scope,
defeating the point of the QScopedPointer class. If you
need such semantics, use std::unique_ptr (and call
release()).
Change-Id: I3236f085f763b04eb98e3242abc06f7c54fb3d8b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/corelib/io/qdir.cpp | 9 | ||||
-rw-r--r-- | src/corelib/tools/qscopedpointer.cpp | 2 | ||||
-rw-r--r-- | src/corelib/tools/qscopedpointer.h | 3 | ||||
-rw-r--r-- | src/dbus/qdbusdemarshaller.cpp | 6 | ||||
-rw-r--r-- | src/xml/dom/qdom.cpp | 5 |
5 files changed, 16 insertions, 9 deletions
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 16fd09efdb..9dd0f4ac1d 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -63,6 +63,7 @@ #endif #include <algorithm> +#include <memory> #include <stdlib.h> QT_BEGIN_NAMESPACE @@ -1022,12 +1023,12 @@ bool QDir::cd(const QString &dirName) } } - QScopedPointer<QDirPrivate> dir(new QDirPrivate(*d_ptr.constData())); + std::unique_ptr<QDirPrivate> dir(new QDirPrivate(*d_ptr.constData())); dir->setPath(newPath); if (!dir->exists()) return false; - d_ptr = dir.take(); + d_ptr = dir.release(); return true; } @@ -1730,7 +1731,7 @@ bool QDir::isRelative() const bool QDir::makeAbsolute() { const QDirPrivate *d = d_ptr.constData(); - QScopedPointer<QDirPrivate> dir; + std::unique_ptr<QDirPrivate> dir; if (!!d->fileEngine) { QString absolutePath = d->fileEngine->fileName(QAbstractFileEngine::AbsoluteName); if (QDir::isRelativePath(absolutePath)) @@ -1743,7 +1744,7 @@ bool QDir::makeAbsolute() dir.reset(new QDirPrivate(*d_ptr.constData())); dir->setPath(d->absoluteDirEntry.filePath()); } - d_ptr = dir.take(); // actually detach + d_ptr = dir.release(); // actually detach return true; } diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index b067392071..1dd77a22dc 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -251,6 +251,8 @@ QT_BEGIN_NAMESPACE /*! \fn template <typename T, typename Cleanup> T *QScopedPointer<T, Cleanup>::take() + \obsolete Use std::unique_ptr and release() instead. + Returns the value of the pointer referenced by this object. The pointer of this QScopedPointer object will be reset to \nullptr. diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index 5b2a15f5f6..2297d7cb1e 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -151,12 +151,15 @@ public: Cleanup::cleanup(oldD); } +#if QT_DEPRECATED_SINCE(6, 1) + QT_DEPRECATED_VERSION_X_6_1("Use std::unique_ptr instead, and call release().") T *take() noexcept { T *oldD = d; d = nullptr; return oldD; } +#endif void swap(QScopedPointer<T, Cleanup> &other) noexcept { diff --git a/src/dbus/qdbusdemarshaller.cpp b/src/dbus/qdbusdemarshaller.cpp index c9da593ad2..39d2dd0354 100644 --- a/src/dbus/qdbusdemarshaller.cpp +++ b/src/dbus/qdbusdemarshaller.cpp @@ -40,7 +40,7 @@ #include "qdbusargument_p.h" #include "qdbusconnection.h" -#include <qscopedpointer.h> +#include <memory> #include <stdlib.h> @@ -426,12 +426,12 @@ QDBusDemarshaller *QDBusDemarshaller::endCommon() QDBusArgument QDBusDemarshaller::duplicate() { - QScopedPointer<QDBusDemarshaller> d(new QDBusDemarshaller(capabilities)); + std::unique_ptr<QDBusDemarshaller> d(new QDBusDemarshaller(capabilities)); d->iterator = iterator; d->message = q_dbus_message_ref(message); q_dbus_message_iter_next(&iterator); - return QDBusArgumentPrivate::create(d.take()); + return QDBusArgumentPrivate::create(d.release()); } QT_END_NAMESPACE diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index 585e6875e2..b7c676dd09 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -62,6 +62,7 @@ #include <stdio.h> #include <limits> +#include <memory> QT_BEGIN_NAMESPACE @@ -2554,7 +2555,7 @@ QDomNamedNodeMapPrivate::~QDomNamedNodeMapPrivate() QDomNamedNodeMapPrivate* QDomNamedNodeMapPrivate::clone(QDomNodePrivate* p) { - QScopedPointer<QDomNamedNodeMapPrivate> m(new QDomNamedNodeMapPrivate(p)); + std::unique_ptr<QDomNamedNodeMapPrivate> m(new QDomNamedNodeMapPrivate(p)); m->readonly = readonly; m->appendToParent = appendToParent; @@ -2567,7 +2568,7 @@ QDomNamedNodeMapPrivate* QDomNamedNodeMapPrivate::clone(QDomNodePrivate* p) // we are no longer interested in ownership m->ref.deref(); - return m.take(); + return m.release(); } void QDomNamedNodeMapPrivate::clearMap() |