c++ 使用引用捕获声明lambda函数数组会导致堆分配吗?

iyr7buue  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(135)

最近,我被告知声明一个带有引用捕获的lambda函数数组会导致堆分配。我不明白这怎么可能是真的。如果是真的,如何以及有可能进行重构来避免堆分配?
出于可视化目的:

std::function<void(void)> func1 = [a few ref captures here](no argument) -> void { ... }
std::function<void(void)> func2 = [a few different ref captures here](no argument) -> void { ... }
std::function<void(void)> func3 = [a few different ref captures here](no argument) -> void { ... }

std::array<std::function<void(void)>, 3U> func_array{ func1, func2, func3 };
mum43rcc

mum43rcc1#

动态分配来自于对std::function<void(void)>的使用,std::function<void(void)>使用动态分配进行类型擦除。
您需要重构std::function,这将非常困难/可能不可能完成,因为您的闭包具有不同的类型。

相关问题