私はこのような機能を持っています:
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; // <===