在std :: vector中释放mat

PV *_*ipa 3 c++ opencv release image vector

使用OpenCV 2.2,我试图释放内存,调用释放到std :: vector中的Mat图像,例如:

std::vector < Mat > matVec;
Run Code Online (Sandbox Code Playgroud)

但是,似乎

for (int k = 0; k < matVec.size(); k++)
{

   matVec[k].release();

}
Run Code Online (Sandbox Code Playgroud)

没有发布任何内存(但它仍然编译).

我知道OpenCV 2.2中有新的内存管理,但我无法发现问题.

使用IplImage*类型而不是Mat(使用cvReleaseImage()Mat成员函数代替)的类似示例可以正常.release()工作.

任何提示?

eta*_*ion 7

.release()只应在特殊情况下调用,而不是日常使用.只需清除矢量:

std::vector<cv::Mat>().swap(matVec);
Run Code Online (Sandbox Code Playgroud)

这会调用每个Mats 的析构函数,释放内存(如果没有其他cv::Mat指向它的话 - 记住cv::Mat,不像IplImage是引用计数的数据类型.如果在其他地方引用它,你也必须清除该引用).如果要保留向量,但要删除内容,请将.release()代码中的行替换为:

matVec[k] = cv::Mat();
Run Code Online (Sandbox Code Playgroud)