C++ 覆盖cv::Mat.data时会发生什么情况
当我们在C++ 覆盖cv::Mat.data时会发生什么情况,c++,opencv,C++,Opencv,当我们在cv::Mat对象的data属性中手动添加缓冲区地址,然后删除该缓冲区时,会发生什么情况 比如说, cv::Mat test; test.data = (address of Buffer A); 删除缓冲区A时,测试数据会发生什么情况?文档: 所以,由于test不拥有缓冲区A,一旦它被删除,若您访问test.data,它就是UB。 然而,由于copy是一个深度复制,所以您可以访问copy.data您可以按照您所描述的方式发布代码吗?为什么不使用这两个构造函数中的一个呢Mat(整数行、
cv::Mat
对象的data
属性中手动添加缓冲区地址,然后删除该缓冲区时,会发生什么情况
比如说,
cv::Mat test;
test.data = (address of Buffer A);
删除缓冲区A
时,测试数据会发生什么情况?文档:
所以,由于test不拥有缓冲区A,一旦它被删除,若您访问test.data,它就是UB。
然而,由于copy是一个深度复制,所以您可以访问copy.data您可以按照您所描述的方式发布代码吗?为什么不使用这两个构造函数中的一个呢Mat(整数行、整数列、整数类型、void*数据、大小步长=自动步长);Mat(大小、整型、void*数据、大小步长=自动步长);'他们将设置数据指针以及正确的类型和大小。请阅读此处的文档
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