根据我的理解谦虚,OpenCV中的垫有效地处理了内存管理; 所以复制垫并不意味着他们是“硬/物理”复制; 他们只是参考原文垫。
然而,对于已经被推入到使用的push_back较大的垫垫,是安全的清除他们假设,他们很难复制,不使用复制的同样的技术像x=y
?
在下面的代码,做bigx
仍然有x
的内容,甚至释放后后?
Mat x, bigx;
bigx.push_back(x);
x.release();
谢谢 :)
根据我的理解谦虚,OpenCV中的垫有效地处理了内存管理; 所以复制垫并不意味着他们是“硬/物理”复制; 他们只是参考原文垫。
然而,对于已经被推入到使用的push_back较大的垫垫,是安全的清除他们假设,他们很难复制,不使用复制的同样的技术像x=y
?
在下面的代码,做bigx
仍然有x
的内容,甚至释放后后?
Mat x, bigx;
bigx.push_back(x);
x.release();
谢谢 :)
据我所知垫::反推()将创建源的每个反推的单独副本。 所以,你可以释放推后您的源代码。
参见下文的示例,
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拷贝构造函数来创建同一类型的保持原始(源)在自由裁量权的新鲜克隆元素。