前言
std::function 的作用很强大,他让vector等保存不同类型函数的对象: function, functor, lambda…成为了可能。但他有一个潜在的性能风险:在保存lambda/bind时,如果对象的大小 大于两个指针的大小,他就需要分配动态空间。这是大部分人写C++的人不期望看到的。
function什么分配内存
先看function实现的几段代码:6.1.0a-2/include/c++/6.1.0/functional
void* _M_access() { return &_M_pod_data[0]; }
const void* _M_access() const { return &_M_pod_data[0]; }
template<typename _Tp>
_Tp&
_M_access()
{ return *static_cast<_Tp*>(_M_access()); }
1651 _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type)
1652 { new (__functor._M_access()) _Functor(std::move(__f)); }
1653
1654 static void
1655 _M_init_functor(_Any_data& __functor, _Functor&& __f, f