fixed incorrect behaviour of move semantics for cv::Ptr, cv::Mat, cv::UMat in case...
authorПрун Виктор <v_prun@TECH>
Mon, 14 Mar 2016 13:10:23 +0000 (16:10 +0300)
committerПрун Виктор <v_prun@TECH>
Mon, 14 Mar 2016 13:10:23 +0000 (16:10 +0300)
modules/core/include/opencv2/core/mat.inl.hpp
modules/core/include/opencv2/core/ptr.inl.hpp

index 1fb32b3..40453b8 100644 (file)
@@ -1165,6 +1165,9 @@ Mat::Mat(Mat&& m)
 inline
 Mat& Mat::operator = (Mat&& m)
 {
+    if (this == &m)
+      return *this;
+
     release();
     flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols; data = m.data;
     datastart = m.datastart; dataend = m.dataend; datalimit = m.datalimit; allocator = m.allocator;
@@ -3599,6 +3602,8 @@ UMat::UMat(UMat&& m)
 inline
 UMat& UMat::operator = (UMat&& m)
 {
+    if (this == &m)
+      return *this;
     release();
     flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols;
     allocator = m.allocator; usageFlags = m.usageFlags;
index 3f6f214..d33aca9 100644 (file)
@@ -264,6 +264,9 @@ Ptr<T>::Ptr(Ptr&& o) : owner(o.owner), stored(o.stored)
 template<typename T>
 Ptr<T>& Ptr<T>::operator = (Ptr<T>&& o)
 {
+    if (this == &o)
+        return *this;
+
     release();
     owner = o.owner;
     stored = o.stored;