…mat对象包括两个部分:header和pointer,header的大小是固定的,用于描述这个mat的一些信息,如大小;pointer指向了具体的数据的地址…
…为了解决这个问题,OpenCV使用了引用计数。每个Mat对象都有一个自己的header,但是,两个实例instance可能会分享同一个内存空间,不同的实例只是提供了对同一数据的不同访问函数…
…mat的拷贝构造函数copy constructor只拷贝herder的内容和pointer指针,pointer的数据部分没有被拷贝…如果当多个实例引用同一个matrix数据,那么,负责释放数据的是最后使用的实例,这就是引用计数…
…当你想要完整的拷贝一个mat,可以使用cv::Mat::clone() cv::Mat::copyTo()…
Mat F = A.clone();
Mat G;
A.copyTo(G);
- 内存分配是自动的
- 内存管理不是开发者的责任
- 赋值构造和拷贝构造只拷贝header
- 底层的数据需要使用cv::Mat::clone() 和cv::Mat::copyTo()拷贝