当我们覆盖cv :: Mat.data时会发生什么

时间:2016-11-22 23:22:34

标签: c++ opencv

当我们在data对象的cv::Mat属性中手动添加缓冲区的地址,然后删除该缓冲区时会发生什么?

例如,

cv::Mat test;
test.data = (address of Buffer A);

删除test.dataBuffer A会发生什么?

1 个答案:

答案 0 :(得分:2)

文档:http://docs.opencv.org/3.1.0/d3/d63/classcv_1_1Mat.html

int rows, cols, type; // you need initialize them
void* data = (address of Buffer A)
cv::Mat test = cv::Mat(rows, cols, type, data); // according to documentation, test does not own data
cv::Mat copy = test.clone() // copy copies is a deep copy of test 

因为测试不拥有缓冲区A,一旦删除,如果访问test.data,它就是UB。 但是,由于副本是深层副本,因此您可以访问copy.data