Удалить указатель на std:: функцию
У меня есть такая функция:
void cb( void *obj )
{
if(nullptr != obj)
{
auto f = static_cast< function<void()>* >(obj);
(*f)();
}
}
И я использую его следующим образом:
auto obj = new function<void()> ( bind(&AClass::AMethod, &x) );
cb(obj);
Где AClass-класс, AMethod-метод AClass, а x-экземпляр AClass.
Теперь вопрос: почему удаление указателя на std:: function внутри cb приводит к сбою программы:
void cb( void *o )
{
if(nullptr != o)
{
auto f = static_cast< function<void()>* >(o);
(*f)();
delete f; // <===
}
}
В то время как удаление его после вызова cb не делает?
auto obj = new function<void()> ( bind(&AClass::AMethod, &x) );
cb(obj);
delete obj; // <===