Commit a90a576d authored by Прун Виктор's avatar Прун Виктор

fixed incorrect behaviour of move semantics for cv::Ptr, cv::Mat, cv::UMat in…

fixed incorrect behaviour of move semantics for cv::Ptr, cv::Mat, cv::UMat in case when rvalue-reference references to *this.
parent fbc221d3
...@@ -1165,6 +1165,9 @@ Mat::Mat(Mat&& m) ...@@ -1165,6 +1165,9 @@ Mat::Mat(Mat&& m)
inline inline
Mat& Mat::operator = (Mat&& m) Mat& Mat::operator = (Mat&& m)
{ {
if (this == &m)
return *this;
release(); release();
flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols; data = m.data; 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; datastart = m.datastart; dataend = m.dataend; datalimit = m.datalimit; allocator = m.allocator;
...@@ -3599,6 +3602,8 @@ UMat::UMat(UMat&& m) ...@@ -3599,6 +3602,8 @@ UMat::UMat(UMat&& m)
inline inline
UMat& UMat::operator = (UMat&& m) UMat& UMat::operator = (UMat&& m)
{ {
if (this == &m)
return *this;
release(); release();
flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols; flags = m.flags; dims = m.dims; rows = m.rows; cols = m.cols;
allocator = m.allocator; usageFlags = m.usageFlags; allocator = m.allocator; usageFlags = m.usageFlags;
......
...@@ -264,6 +264,9 @@ Ptr<T>::Ptr(Ptr&& o) : owner(o.owner), stored(o.stored) ...@@ -264,6 +264,9 @@ Ptr<T>::Ptr(Ptr&& o) : owner(o.owner), stored(o.stored)
template<typename T> template<typename T>
Ptr<T>& Ptr<T>::operator = (Ptr<T>&& o) Ptr<T>& Ptr<T>::operator = (Ptr<T>&& o)
{ {
if (this == &o)
return *this;
release(); release();
owner = o.owner; owner = o.owner;
stored = o.stored; stored = o.stored;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment