我有这样的功能:
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; // <===
答案 0 :(得分:2)
这适用于 g ++ 4.8.1 和 clang 3.4 。两者都没有表现出任何兴趣 valgrind 。那么问题可能是代码中的其他地方或者与编译器版本有关吗?
我在上述两个地方测试过删除。