Документация OpenCV на cv::Mat
, кажется, указывает на то, что в данный момент нет конструкторов перемещения, поэтому что-то вроде cv::Mat A=std::move(some_other_cv_mat)
не имеет особого смысла.Мое текущее (и наивное) решение этой проблемы - извлечь класс из cv::Mat
, для которого я реализую конструктор перемещения следующим образом:
namespace cv
{
//matrix object derived from cv::Mat
class Mvbl_Mat final: public Mat
{
public:
//constructors
Mvbl_Mat(){};
Mvbl_Mat(int rows, int cols, int type, const Scalar &s):Mat(rows, cols, type, s){}
//destructor
~Mvbl_Mat(){};
//move constructor
Mvbl_Mat(Mvbl_Mat && other) noexcept
{
this->data=other.data;
other.data=nullptr;
}
//move assignment operator
Mvbl_Mat & operator=(Mvbl_Mat && other)
{
this->data=other.data;
other.data=nullptr;
return *this;
}
};
}
Хотя это работает для ограниченных проблем, с которыми я сталкиваюсьна данный момент, очевидно, есть много ограничений, и решение далеко от идеального.Итак, как лучше всего эмулировать семантику перемещения для cv::Mat
?