fixed incorrect behaviour of move semantics for cv::Ptr, cv::Mat, cv::UMat in case when rvalue-reference references to *this.

This commit is contained in:
Прун Виктор 2016-03-14 16:10:23 +03:00
parent fbc221d334
commit a90a576d76
2 changed files with 8 additions and 0 deletions

View File

@ -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)
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;

View File

@ -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;