C ++中的递归算法和内存管理

时间:2016-02-21 14:16:31

标签: c++ algorithm recursion lambda c++14

我正在使用boost::filesystem和自定义递归算法来遍历目录中的图像文件。该算法将相邻图像内容读取为两个cv::Mat,将它们一起添加,将它们写入临时文件,然后根据需要递归地继续所有临时文件,直到生成一个唯一图像。客户端代码如下所示:

  auto result = my_recursive_algorithm(boost::filesystem::directory_iterator{path_to_folder},
                     boost::filesystem::directory_iterator{}, [](auto file_a, auto file_b){
                       cv::Mat image_a{cv::imread(file_a.path().string())}; 
                       cv::Mat image_b{cv::imread(file_b.path().string())};
                       cv::Mat sum {};
                       cv::addWeighted(image_a,0.5,image_b,0.5, 0, sum);
                       // generate a unique new_path
                       cv::imwrite(new_path, sum);
                       return new_path;
                     });

我采用这种方法,因为我无法保证程序必须处理的图像数量。可能是因为它们太多而无法记忆。然而,如果这是一种安全的方法,我会徘徊。当lambda返回时会发生什么?由于我只返回new_path,我希望在每个单独的lambda调用完成时调用所有其他局部变量(cv::Mat)的所有析构函数,对吧?或者可能只有在整个递归调用完成后才会调用它们?在后一种情况下,我的方法相当于首先将所有内容加载到内存中。

0 个答案:

没有答案