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