OpenCV 我应该使用智能指针来防止内存泄漏吗?

OpenCV Should I use smart pointers to prevent memory leak

本文关键字:内存 泄漏 我应该 智能 指针 OpenCV      更新时间:2023-10-16

我有一个OpenCV程序,用于预处理和检测OCR的文本区域。

例如,在程序的这一部分中:

cv::Mat image;
cv::Mat outImage;
cv::Mat image_blurred_5x5_kernel;
cv::resize(image, outImage, cv::Size(), .75, .75);
cv::GaussianBlur(image, image_blurred_3x3_kernel, cv::Size(3, 3), 0);

该程序创建3图像; 原始,调整大小和模糊的图像。我只打算使用我获得的最后一张图像。例如,在调整原始图像的大小并将其存储在某个变量中后,我将不再使用原始图像。

但是正如您所看到的,我自己创建和使用了对象,我想知道使用智能指针是否会导致更好的内存控制?还是析构函数就足够了,两种方法之间的差异可以忽略不计?执行时间是我的首要任务,而不是空间使用。

cv::Mat本身正在管理其资源,这些资源将在调用析构函数时释放。由于您将它们放在堆栈上,因此当您超出范围时,将自动处理。

如果您没有将对象放在堆栈上,则应使用智能指针,即

cv::Mat* image_ptr = new cv::Mat; // now you need to handle memory, since the allocated object will not be deleted automatically when changing scope
auto image_smart_pointer = std::make_unique<cv::Mat>(); // allocated object will be deallocated correctly when changing scope, since image_smart_pointer is destructed at change of scope.