最近,我被告知声明一个带有引用捕获的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 };
1条答案
按热度按时间mum43rcc1#
动态分配来自于对
std::function<void(void)>
的使用,std::function<void(void)>
使用动态分配进行类型擦除。您需要重构
std::function
,这将非常困难/可能不可能完成,因为您的闭包具有不同的类型。