summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-11-01 16:53:26 +0100
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-11-20 14:28:31 +0100
commit612a01be6513894ab1ec5a36b699a2142ba7f35c (patch)
tree4018c688b737c9b010677d2c419cb719b9ed9e68
parent5dd7e7b7a826d5d4314dffaaf20d465460616998 (diff)
downloadqtbase-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.cpp9
-rw-r--r--src/corelib/tools/qscopedpointer.cpp2
-rw-r--r--src/corelib/tools/qscopedpointer.h3
-rw-r--r--src/dbus/qdbusdemarshaller.cpp6
-rw-r--r--src/xml/dom/qdom.cpp5
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()