当我们在data
对象的cv::Mat
属性中手动添加缓冲区的地址,然后删除该缓冲区时会发生什么?
例如,
cv::Mat test;
test.data = (address of Buffer A);
删除test.data
时Buffer A
会发生什么?
答案 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