什么类型的对象是opencv :: Mat?它是shared_ptr还是auto_ptr?它是指针吗?

man*_*ans 0 c++ boost opencv stl smart-pointers

我使用OpenCv,我在代码中使用它类似于以下代码:

Mat Create()
{ 
     Mat myMat(10, 10, CV8U_C1);    
     int x=myMat.Rows; // I am accessing Mat like an object not a pointer. 
     Return myMat;
 }

 Main()
 {
       Mat aMat=Create(); // created inside this function
       int x=aMat.Rows; // accessing it using . notation
       // do some work
       return;   //I did not delete Mat, as it would release its memory.
 }
Run Code Online (Sandbox Code Playgroud)

如何在我的c ++代码中创建类似的对象?

我正在使用STL,但如果需要我也可以使用Boost.

Soh*_*ain 5

首先,std::vector,Mat,和其他数据结构具有在需要时解除分配基础存储缓冲器析构函数.这意味着析构函数并不总是释放缓冲区,如果的话Mat.他们考虑了可能的数据共享.析构函数递减与矩阵数据缓冲区关联的引用计数器.当且仅当参考计数器达到零时,才释放缓冲区.也就是说,当没有其他结构引用相同的缓冲区时.同样,Mat复制实例时,不会真正复制实际数据.相反,引用计数器递增以记住存在相同数据的另一个所有者.还有Mat::clone()一种方法可以创建矩阵数据的完整副本.