我有这样的功能:
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; // <===