Удалить указатель на 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; // <===
1 2

1 ответ:

Это прекрасно работает как на g++ 4.8.1, так и на clang 3.4. Также оба не показывают ничего интересногоvalgrind . Так, может быть, проблема где-то еще в вашем коде или связана с вашей версией компилятора?

Я проверил удаление в обоих упомянутых местах.