我用的是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.
}
如何在我的 C++ 代码中创建相似的对象?
我正在使用 STL,但如果需要我也可以使用 Boost。
最佳答案
首先,std::vector
、Mat
和其他数据结构都具有析构函数,可以在需要时释放底层内存缓冲区。这意味着析构函数并不总是像 Mat
那样释放缓冲区。他们考虑了可能的数据共享。析构函数递减与矩阵数据缓冲区关联的引用计数器。缓冲区被释放当且仅当引用计数器达到零。也就是说,当没有其他结构引用同一缓冲区时。同样,当复制 Mat
实例时,并没有真正复制实际数据。相反,引用计数器会增加以记住同一数据的另一个所有者。还有 Mat::clone()
方法可以创建矩阵数据的完整拷贝。
关于c++ - opencv::Mat 是什么类型的对象?它是 shared_ptr 还是 auto_ptr ?它是一个指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17193512/