0

lambda 函数 fun 应该返回一个输入向量乘以在 t 处计算的标量函数 f 的值。使用下面的代码,我得到了预期的结果(dest 等于 input*f(t)),但是 Visual Leak 检测器报告了内存泄漏。

下面的代码有什么问题吗?

vector<double> input(10,1.);//input_vector for testing
auto f = [](double t){return sin(t);};

auto fun = [f,input](double t)->vector<double>
{
    vector<double> dest(input.size());
    transform(input.begin(),input.end(),dest.begin(),[=](double a){return a*f(t);});
    return dest;
};

如果我通过将带有 transform 的行写入来明确捕获 f 和 t

transform(input.begin(),input.end(),dest.begin(),[f,t](double a){return a*f(t);});

然后该代码段无法编译(我收到错误 C3480:lambda 捕获变量必须来自封闭函数范围)。

如果我在变换之外评估 f ,并将变换的线替换为两行

double r = f(t);
transform(input.begin(),input.end(),dest.begin(),[r](double a){return a*r;};

我没有得到内存泄漏。当然,从效率的角度来看,由于 f 的单一评估,后一个版本更有意义,但我想了解我在第一个版本中是否做了任何非法的事情。

谢谢!

4

0 回答 0