Почему эта лямбда пропускает память?C++

Программы на C++. Форум разработчиков
Anonymous
Почему эта лямбда пропускает память?

Сообщение Anonymous »

В моем проекте есть код, который выглядит следующим образом:

Код: Выделить всё

class ClassA {
ClassA(int i) : a(i) {};
private:
int a;
};

struct  ClassB{
std::shared_ptr classASharedPointer;
};

struct ClassC {
ClassA* classAPointer;
};

void someFunction(std::vector &vecBs, std::vector &vecCs) {

const auto toClassC = [](const auto &b) -> ClassC {
return {b.classASharedPointer.get()};
};

std::transform(vecBs.begin(), vecBs.end(), vecCs.begin(),  toClassC);
}

int main() {
std::vector vecBs(5);
std::vector vecCs(5);

someFunction(vecBs, vecCs);

return 0;
}
И когда я проверяю размер виртуальной машины до и после лямбды «toClassC», я вижу увеличение. и я не вижу, чтобы эта память когда-либо была восстановлена. Хуже того, у меня такое ощущение, что эта лямбда неправильная, потому что у меня такое ощущение, что она берет первый объект, который видит, и работает с ним, независимо от того, для скольких других объектов она была вызвана.
Как это исправить?
Примечание: очевидно, что это не настоящий код, над которым я работаю (ха! шокер). Но я изо всех сил старался предоставить минимальный воспроизводимый пример. И в приведенном выше фрагменте я не увидел того увеличения размера виртуальной памяти, которое наблюдаю в своем исходном проекте.
почему я думаю, что это утечка памяти (я могу ошибаться), так это то, что он выделяет место для этой лямбды каждый раз, когда вызывается функция. Память никогда не восстанавливается. AFAIK, этого не должно произойти. А место для лямбды должно быть зарезервировано только один раз. Но я вижу, что, например, если main() дважды вызывает someFunction(), я увижу два выделения памяти для этой лямбды.

Подробнее здесь: https://stackoverflow.com/questions/790 ... aks-memory

Вернуться в «C++»