删除指向std :: function的指针

时间:2013-10-03 22:21:20

标签: c++ c++11 std-function

我有这样的功能:

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的实例。

现在问题是:为什么在cb中删除指向std :: function的指针会导致程序崩溃:

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 个答案:

答案 0 :(得分:2)

这适用于 g ++ 4.8.1 clang 3.4 。两者都没有表现出任何兴趣 valgrind 。那么问题可能是代码中的其他地方或者与编译器版本有关吗?

我在上述两个地方测试过删除。