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:
parent
fbc221d334
commit
a90a576d76
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user