Этот код предназначен только для иллюстрации вопроса.
#include <functional>
struct MyCallBack {
void Fire() {
}
};
int main()
{
MyCallBack cb;
std::function<void(void)> func = std::bind(&MyCallBack::Fire, &cb);
}
Эксперименты с valgrind показывают, что строка, назначающая func
, динамически выделяет около 24 байтов с gcc 7.1.1 на linux.
В реальном коде у меня есть несколько горстей разных структур, все с функцией члена void(void)
, которая хранится в ~ 10 миллионов std::function<void(void)>
.
Есть ли способ избежать динамического выделения памяти при выполнении std::function<void(void)> func = std::bind(&MyCallBack::Fire, &cb);
? (Или иначе присвоить эту функцию-члену std::function
)