Код: Выделить всё
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;
}
Как это исправить?
Примечание: очевидно, что это не настоящий код, над которым я работаю (ха! шокер). Но я изо всех сил старался предоставить минимальный воспроизводимый пример. И в приведенном выше фрагменте я не увидел того увеличения размера виртуальной памяти, которое наблюдаю в своем исходном проекте.
почему я думаю, что это утечка памяти (я могу ошибаться), так это то, что он выделяет место для этой лямбды каждый раз, когда вызывается функция. Память никогда не восстанавливается. AFAIK, этого не должно произойти. А место для лямбды должно быть зарезервировано только один раз. Но я вижу, что, например, если main() дважды вызывает someFunction(), я увижу два выделения памяти для этой лямбды.
Подробнее здесь: https://stackoverflow.com/questions/790 ... aks-memory