]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/refptr.h
Check for self-assignment in non-trivial assignment operators
[libs/core.git] / source / core / refptr.h
index 34560ec0389beea43bbfb66fe2db1bd111bb954a..79401dce5be40094a9f55212c0c3fb4abd8f7dc9 100644 (file)
@@ -151,6 +151,9 @@ template<typename T>
 template<typename U>
 RefPtr<T> &RefPtr<T>::assign(const RefPtr<U> &p)
 {
+       if(static_cast<const void *>(&p)==this)
+               return *this;
+
        decref();
        data = p.data;
        counts = p.counts;
@@ -195,6 +198,9 @@ template<typename T>
 template<typename U>
 WeakPtr<T> &WeakPtr<T>::assign(const WeakPtr<U> &p)
 {
+       if(&p==this)
+               return *this;
+
        decref();
        data = p.get();
        counts = (data ? p.counts : nullptr);