Предполагается, что лямбда-функция fun возвращает входной вектор, умноженный на значение скалярной функции f, вычисленной в t. Используя приведенный ниже код, я получаю ожидаемые результаты (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;
};
Если я захватить f и t явно, записав строку с преобразованием как
transform(input.begin(),input.end(),dest.begin(),[f,t](double a){return a*f(t);});
Затем фрагмент не компилируется (я получаю ошибку C3480: переменная захвата лямбда-выражения должна быть из области действия включающей функции).
Если я оцениваю f вне преобразования и заменяю строку с преобразованием двумя строками
double r = f(t);
transform(input.begin(),input.end(),dest.begin(),[r](double a){return a*r;};
Я не получаю утечку памяти. Конечно, эта последняя версия имеет больше смысла с точки зрения эффективности из-за единственной оценки f, но я хотел бы понять, делаю ли я что-то незаконное в первой версии.
Спасибо!
Задача ещё не решена.