diff --git a/modules/core/include/opencv2/core/mat.inl.hpp b/modules/core/include/opencv2/core/mat.inl.hpp index 1fb32b3d2..40453b8e0 100644 --- a/modules/core/include/opencv2/core/mat.inl.hpp +++ b/modules/core/include/opencv2/core/mat.inl.hpp @@ -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; diff --git a/modules/core/include/opencv2/core/ptr.inl.hpp b/modules/core/include/opencv2/core/ptr.inl.hpp index 3f6f214a8..d33aca988 100644 --- a/modules/core/include/opencv2/core/ptr.inl.hpp +++ b/modules/core/include/opencv2/core/ptr.inl.hpp @@ -264,6 +264,9 @@ Ptr::Ptr(Ptr&& o) : owner(o.owner), stored(o.stored) template Ptr& Ptr::operator = (Ptr&& o) { + if (this == &o) + return *this; + release(); owner = o.owner; stored = o.stored;