QSharedPointer: add reset() member functions
authorMarc Mutz <marc.mutz@kdab.com>
Tue, 6 Mar 2012 07:37:33 +0000 (08:37 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 16 Mar 2012 18:27:59 +0000 (19:27 +0100)
These have been added for std::shared_ptr compatibility,
but in particular to allow tst_qnetworkreply && friends
to drop the implicit conversions added to QSP by
inheritance, so QSP can become final.

Change-Id: I0f0401b02125d65622e52393b40a3b10bd9a850c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/tools/qsharedpointer.cpp
src/corelib/tools/qsharedpointer.h
src/corelib/tools/qsharedpointer_impl.h

index 58c62f0..50e555d 100644 (file)
 */
 
 /*!
+    \fn void QSharedPointer::reset()
+    \since 5.0
+
+    Same as clear(). For std::shared_ptr compatibility.
+*/
+
+/*!
+    \fn void QSharedPointer::reset(T *t)
+    \since 5.0
+
+    Resets this QSharedPointer object to point to \a t
+    instead. Equivalent to:
+    \code
+    QSharedPointer<T> other(t); this->swap(other);
+    \endcode
+*/
+
+/*!
+    \fn void QSharedPointer::reset(T *t, Deleter deleter)
+    \since 5.0
+
+    Resets this QSharedPointer object to point to \a t
+    instead, with deleter \a deleter. Equivalent to:
+    \code
+    QSharedPointer<T> other(t, deleter); this->swap(other);
+    \endcode
+*/
+
+/*!
     \fn QWeakPointer::QWeakPointer()
 
     Creates a QWeakPointer that points to nothing.
index 4033b5d..b0a1b76 100644 (file)
@@ -85,6 +85,11 @@ public:
 
     void clear();
 
+    void reset();
+    void reset(T *t);
+    template <typename Deleter>
+    void reset(T *t, Deleter deleter);
+
     // casts:
     template <class X> QSharedPointer<X> staticCast() const;
     template <class X> QSharedPointer<X> dynamicCast() const;
index 81ce178..fadb4e0 100644 (file)
@@ -510,6 +510,13 @@ public:
     inline void swap(QSharedPointer &other)
     { QSharedPointer<T>::internalSwap(other); }
 
+    inline void reset() { clear(); }
+    inline void reset(T *t)
+    { QSharedPointer copy(t); swap(copy); }
+    template <typename Deleter>
+    inline void reset(T *t, Deleter deleter)
+    { QSharedPointer copy(t, deleter); swap(copy); }
+
     template <class X>
     QSharedPointer<X> staticCast() const
     {