std::function
的实例本身具有空间,用于包含有限大小的“捕获”参数。为了避免内存分配的混乱,我想确保我使用的一些 std::function
实例不需要为参数进行额外的分配。
对于特定平台/标头,是否有一种简单的方法可以在为捕获进行二次分配之前确定捕获的最大大小是多少?
来自构造函数的文档,强调我的:
当目标是函数指针或
时,保证小对象优化,也就是说,这些目标始终直接存储在std::reference_wrapper
对象内,不会发生动态分配。其他大对象可以在动态分配的存储中构造,并由 std::function 对象通过指针访问。std::function
所以你有函数指针的保证,并且
std::reference_wrapper
(但没有这个指针的所有权)。