C++ Mat::推回(x)复制x元素吗?

C++ Mat::推回(x)复制x元素吗?,c++,opencv,vector,mat,C++,Opencv,Vector,Mat,根据我的理解,OpenCV的Mat可以有效地处理内存管理;因此,复制垫子并不意味着它们是硬拷贝/物理拷贝的;它们只是指原始的垫子 但是,对于使用push_back将垫子推入较大垫子的垫子,如果它们是硬拷贝的,而不是使用与x=y中相同的拷贝技术,则清除它们是否安全 在下面的代码中,即使在发布了x的内容后,bigx是否仍然有x的内容 Mat x, bigx; bigx.push_back(x); x.release(); 谢谢:据我所知,Mat::pushback将在每个pushback上创建源代

根据我的理解,OpenCV的Mat可以有效地处理内存管理;因此,复制垫子并不意味着它们是硬拷贝/物理拷贝的;它们只是指原始的垫子

但是,对于使用push_back将垫子推入较大垫子的垫子,如果它们是硬拷贝的,而不是使用与x=y中相同的拷贝技术,则清除它们是否安全

在下面的代码中,即使在发布了x的内容后,bigx是否仍然有x的内容

Mat x, bigx;
bigx.push_back(x);
x.release();

谢谢:

据我所知,Mat::pushback将在每个pushback上创建源代码的单独副本。所以你可以在推后释放你的源代码

参见下面的示例

   Mat src=imread("src.jpg",1);
   int rowSize=src.rows;
   Mat A;
   A.push_back(src.reshape(0,1));
   src.release();

   Mat B;
   B = A.row(0).clone();
   imshow("src",B.reshape(0,rowSize));
   waitKey(); 

据我所知,Mat::pushback将在每个pushback上创建源代码的单独副本。所以你可以在推后释放你的源代码

参见下面的示例

   Mat src=imread("src.jpg",1);
   int rowSize=src.rows;
   Mat A;
   A.push_back(src.reshape(0,1));
   src.release();

   Mat B;
   B = A.row(0).clone();
   imshow("src",B.reshape(0,rowSize));
   waitKey(); 

是,push_back调用复制构造函数创建相同类型的新克隆元素,保留原始源。

是,push_back调用复制构造函数创建相同类型的新克隆元素,保留原始源