2

我有这样的功能:

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; // <===
4

1 回答 1

2

这在g++ 4.8.1clang 3.4上都可以正常工作。也都没有表现出任何兴趣valgrind。那么问题可能出在您的代码中的其他地方或与您的编译器版本有关?

我在提到的两个地方都测试了删除。

于 2013-10-03T22:30:23.150 回答